我需要从句子中提取字符串“ 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中不起作用?
答案 0 :(得分:1)
re.match
尝试从字符串开头匹配正则表达式。
来自docs:
如果字符串开始处的零个或多个字符与 正则表达式模式,返回相应的match对象。 如果字符串与模式不匹配,则返回None;否则返回false。请注意, 与零长度匹配不同。
请注意,即使在MULTILINE模式下,
re.match()
也只会在 字符串的开头而不是每一行的开头。如果要在字符串中的任意位置找到匹配项,请使用
search()
代替 (另请参见search()
与match()
)。
在这种情况下,您的正则表达式实质上变为
^(?<=Jahr )[0-9]+
当然与您的字符串不匹配。
如果使用search
或findall
,您将得到结果。
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'>