2

我在玩 Python 时遇到了这个问题:当我创建一个随机字符串时,比如说“test 1981”,下面的 Python 调用返回一个空字符串。

>>> re.search('\d?', "test 1981").group()
''

我想知道为什么会这样。我正在阅读其他一些帖子,似乎它与贪婪与非贪婪运算符有关。是那个'?检查第一个值是否是数字,如果不是,它采用更简单、更快的路径并且什么都不输出?任何澄清都会有所帮助。谢谢!

4

3 回答 3

3

您的模式匹配一​​个数字或空字符串。它从第一个字符开始并尝试匹配一个数字,接下来它正在尝试匹配替代项,这意味着空字符串,瞧,在第一个字符之前找到了一个匹配项。

我认为您希望它继续前进并尝试匹配下一个字符,但这还没有完成,首先它尝试匹配量词在第一个位置允许的内容。那是0或一位数。

可选量词的使用仅在与 required part 结合使用时才有意义,例如您想要一个数字后跟一个可选的数字:

>>> re.search('\d\d?', "test 1981").group()
'19'

否则你的模式总是正确的。

于 2013-06-04T06:11:06.760 回答
1

正则表达式

\d?

只是意味着它应该可选地 ( ?) 匹配单个数字 ( \d)。

如果你使用这样的东西,它会像你期望的那样工作(匹配字符串中任何地方的单个数字):

\d
于 2013-06-04T04:18:02.617 回答
1

re.search('\d?', "test 1981").group()贪婪地匹配它可以找到的模式的第一个匹配项(0 或 1 个数字)。在这种情况下,这是零位数。注意re.search('\d?', "1981 test").group()实际上匹配字符串'1'开头的字符串。您可能在这里寻找的是re.search('\d+', "test 1981").group(),它可以找到整个字符串 1981 ,无论它在哪里。

于 2013-06-04T04:37:15.460 回答