我正在尝试使用 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”。
答案 0 :(得分:3)
*
匹配前面的模式任意次数,包括零次。所以 [0-9]*[\.]*[0-9]*
匹配零位后跟零个点后跟零位,这允许它匹配 <
之前的零长度字符串。
*
后没有 [\.]
的版本要求匹配中有 .
,因此它不能匹配空字符串。
顺便说一句,.
在 []
内时,没有必要逃逸。所以你可以写 [.]
或 \.
,你不需要两者都需要。