我在使用Python时遇到了问题:当我创建一个随机字符串时,假设“test 1981”,下面的Python调用返回一个空字符串。
>>> re.search('\d?', "test 1981").group()
''
我想知道为什么会这样。我正在阅读其他一些帖子,似乎它与贪婪与非贪婪的运营商有关。这是'?'检查第一个值是否为数字,如果不是,则采用更简单,更快速的路径并且只输出任何内容? 任何澄清都会有所帮助。谢谢!
答案 0 :(得分:3)
您的模式匹配数字或空字符串。它从第一个字符开始并尝试匹配一个数字,它接下来正在尝试匹配替代,意味着空字符串,在第一个字符之前找到匹配。
我认为你希望它继续前进并尝试匹配下一个角色,但是没有完成,首先它会尝试匹配量词在第一个位置上允许的内容。这是0或一位数。
使用可选的量词仅与所需的部分结合使用,比如你想要一个数字后跟一个可选的数字:
>>> re.search('\d\d?', "test 1981").group()
'19'
否则你的模式总是如此。
答案 1 :(得分:1)
正则表达式
\d?
只是意味着它应该(?
)匹配单个数字(\d
)。
如果你使用这样的东西,它将按你的预期工作(在字符串中的任何地方匹配单个数字):
\d
答案 2 :(得分:1)
re.search('\d?', "test 1981").group()
贪婪地匹配它可以找到的模式的第一个匹配(0或1位)。在这种情况下,这是零数字。请注意,re.search('\d?', "1981 test").group()
实际上匹配字符串开头的字符串'1'
。你在这里寻找的是re.search('\d+', "test 1981").group()
,无论它在哪里,它都能找到整个字符串。