我的Python列表如下,
l = ['ac no **82....383 is as on 6767', 'ac **82....383 in for 23-23']
我编写了Python正则表达式来提取列表上面元素中'383'位置的任何数字:
for i in l:
match = re.search(r'ac.*\.([\d]*)\s(is|in)', i)
if match: print match.group(1)
工作正常。 但它不适用于此。
l = ['ac no **82....383 of as on 2737183']
我可以通过调整相同的正则表达式来解决这个问题。但如果有更好的方法,我真的很感激。
答案 0 :(得分:1)
您可以使用以下内容:
ac.*?\.([\d]*)\b
^ ^
?
让它变得非贪婪\b
使其独立于is, of, in etc..
请参阅DEMO
即:
match = re.search(r'ac.*?\.([\d]*)\b', i)
答案 1 :(得分:0)
这是因为你的号码后面有of
这个词而你没有在正则表达式中定义这种情况(你刚刚定义了is
或in
)。您也可以在群组of
中添加(is|in)
,或者作为一般方式使用其他正则表达式。
例如,您可以使用r'\.{3,}(\d*)
作为匹配前面有3个或更多点的数字的正则表达式。
>>> l = ['ac no **82....383 is as on 6767', 'ac **82....38300 in for 23-23','ac no **82....323 of as on 2737183']
>>> for i in l:
... match = re.search(r'ac.*\.{3,}(\d*)', i)
... if match: print match.group(1)
...
383
38300
323
答案 2 :(得分:0)
或者你可以在没有正则表达式的情况下完成它,例如:
a = 'ac no **82....383 of as on 2737183'
print a.split(".")[-1].split(" ")[0]
==> 383