查找字符串中任意数字的正则表达式
在正则表达式中,表示任何数字的符号是什么呢?
比如说,如果我想在一个字符串中查找任何数字,无论是正数还是负数。
我之前用的是 \d+,但是这样找不到 0 或者 -1。
6 个回答
3
要匹配正数或负数,比如 -3
或 +5
,可以使用 [+-]?\d+
这个表达式:
re.findall('[+-]?\d+', 'sfkdjfsdfj-1skjfslkdjf+4') # ['-1', '+4']
记得把负号放在最后,这样编译器才能明白你不是在说别的意思。
4
\d
可以用来匹配任何非负整数。\d
的意思和 [0-9]
是一样的,也就是匹配任何一个数字字符,所以它自然不会匹配负数。如果你想匹配负数,可以在前面加一个可选的负号:
\-?\d+
\d
肯定会匹配到 0
。
27
如果你想找正数、负数或者小数,可以用这个表达式 [+-]?\d+(?:\.\d+)?
>>> nums = re.compile(r"[+-]?\d+(?:\.\d+)?")
>>> nums.search("0.123").group(0)
'0.123'
>>> nums.search("+0.123").group(0)
'+0.123'
>>> nums.search("123").group(0)
'123'
>>> nums.search("-123").group(0)
'-123'
>>> nums.search("1").group(0)
'1'
不过,这个表达式对前面和后面的零处理得不太好:
>>> nums.search("0001.20000").group(0)
'0001.20000'
编辑: 上面的正则表达式已经修正,可以找到单个数字了。
如果你想支持科学计数法,可以试试这个 [+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?
:
>>> nums2 = re.compile(r"[+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?")
>>> nums2.search("-1.23E+45").group(0)
'-1.23E+45'
>>> nums2.search("0.1e-456").group(0)
'0.1e-456'
>>> nums2.search("1e99").group(0)
'1e99'