在python中检索以regex字符串开头的数字

时间:2018-11-24 17:11:12

标签: python-3.x

我需要从句子中提取字符串“ Jahr”后的一年,并尝试使用正则表达式。

事实证明可以在regex101上使用:(?<=Jahr )[0-9]+

但是在python中,我使用的语法肯定有问题:

import re

b = re.match(r"(?<=Jahr )[0-9]+", 'Example Jahr 2007 and more text') 
print(b)

应输出:2007

为什么这在python中不起作用?

1 个答案:

答案 0 :(得分:1)

re.match尝试从字符串开头匹配正则表达式。

来自docs

  

如果字符串开始处的零个或多个字符与   正则表达式模式,返回相应的match对象。   如果字符串与模式不匹配,则返回None;否则返回false。请注意,   与零长度匹配不同。

     

请注意,即使在MULTILINE模式下,re.match()也只会在   字符串的开头而不是每一行的开头。

     

如果要在字符串中的任意位置找到匹配项,请使用 search() 代替   (另请参见search()match())。

在这种情况下,您的正则表达式实质上变为

^(?<=Jahr )[0-9]+当然与您的字符串不匹配。

如果使用searchfindall,您将得到结果。

import re

b = re.findall(r"(?<=Jahr )[0-9]+", 'Example Jahr 2007 and more text')
print(b[0])
# 2007

b = re.search(r"(?<=Jahr )[0-9]+", 'Example Jahr 2007 and more text')
print(b)
# <re.Match object; span=(13, 17), match='2007'>