re.search 不返回匹配某些字符串

时间:2021-03-04 00:53:17

标签: python regex

我正在尝试使用 re.search 从字符串中提取模式,示例如下:

“<2”、“<20.000”

import re
re.search('[0-9]*[\.][0-9]*','<20.000')[0]

'20.000'

re.search('[0-9]*[\.]*[0-9]*','<20.000')[0]

''

re.search('[0-9]*[\.][0-9]*','<2')[0]

TypeError: 'NoneType' object is not subscriptable

re.search('[0-9]*[\.]*[0-9]*','<2')[0]

''

我会认为表达式在第二种情况下可以使用 [\.]* 表示“20.000”。我也曾认为它适用于“<2”,但都返回空白字符串。我不明白为什么它适用于带有 [\.] 的“20.000”。

1 个答案:

答案 0 :(得分:3)

* 匹配前面的模式任意次数,包括零次。所以 [0-9]*[\.]*[0-9]* 匹配零位后跟零个点后跟零位,这允许它匹配 < 之前的零长度字符串。

* 后没有 [\.] 的版本要求匹配中有 .,因此它不能匹配空字符串。

顺便说一句,.[] 内时,没有必要逃逸。所以你可以写 [.]\.,你不需要两者都需要。

相关问题