我正试图设计一个简单的函数来捕捉输入错误,例如:
"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
,但是我觉得我的函数会被过度修补,有一个更简单的方法
这个问题在某种程度上相当于thisphp问题
下面是另一种方法,以防您更喜欢远离regex,如果您对regex不够熟悉而无法自己进行修改,那么regex有时可能会很难使用:
返回:
生成器也可以很容易地修改,如果需要的话永远不会产生空白字符串。
你可以用这个正则表达式代替你的正则表达式:
然后,您必须过滤列表以删除空字符串/仅空白字符串。
问题是Python的
re.split()
没有在零长度匹配上拆分。但是您可以通过re.findall()
获得所需的结果:\d+
匹配任意数字,[^\W\d_]+
匹配任意单词。相关问题 更多 >
编程相关推荐