我试图找出一个简单的函数来捕捉错别字,例如:
"Westminister15"
"Westminister15London"
"23Westminister15London"
固定后:
["Westminister", "15"]
["Westminister", "15", "London"]
["23", "Westminister", "15", "London"]
首次尝试:
def fixate(query):
digit_pattern = re.compile(r'\D')
alpha_pattern = re.compile(r'\d')
digits = filter(None, digit_pattern.split(query))
alphas = filter(None, alpha_pattern.split(query))
print digits
print alphas
结果:
fixate("Westminister15London")
> ['15']
> ['Westminister', 'London']
然而,我认为这可以做得更有效,我仍然得到坏的结果,当我尝试这样的东西:
fixate("Westminister15London England")
> ['15']
> ['Westminister', 'London England']
显然,它应该分别使用London
和England
,但是我觉得我的函数会被过度修补,有一种更简单的方法
这个问题有点类似于this php问题
3条答案
按热度按时间ctehm74n1#
使用
re.findall()
可以获得所需的结果:\d+
匹配任意数量的数字,[^\W\d_]+
匹配任意单词。re.split()
在当前的Python版本中也是可能的,因为现在支持对零长度匹配进行拆分,但是得到的正则表达式要复杂得多,所以我仍然推荐旧的方法。eqoofvh92#
如果你不想使用regex,这里还有另一种方法,如果你不熟悉它,不能自己修改它,它有时会很笨拙:
退货:
如果需要,生成器也可以很容易地修改为永远不生成空白字符串。
dddzy1tm3#
您可以使用以下正则表达式代替您的正则表达式:
然后,您必须过滤列表,删除空字符串/仅包含空格的字符串。