正则表达式以查找字符串中的任何数字

时间:2011-06-28 14:25:40

标签: python regex

任何数字的符号是什么? 就像我正在搜索字符串中的任何数字,正面或负面。 我一直在使用\ d +但是找不到0或-1

5 个答案:

答案 0 :(得分:20)

搜索正数,负数和/或小数,您可以使用[+-]?\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'

答案 1 :(得分:4)

\d应该可以匹配任何非负整数。 \d相当于[0-9](任何单个数字字符),因此它当然不会与负数相匹配。在这种情况下添加可选的负号:

\-?\d+

\d肯定会与0匹配。

答案 2 :(得分:0)

默认情况下,

\ d将匹配0,因此唯一需要修改正则表达式以匹配负值,为此您只需使用:

import re
re.findall(r'[+-]?\d+', ' 1 sd  2 s 3 sfs 0 -1')

OR

import re
re.findall(r'(?<!\S)[+-]?\d+(?!\S)', '234 +1 -10 23jjj ssf54 sdg5dfgdf') 
>>> ['234', '+1', '-10']

答案 3 :(得分:0)

要匹配正数或负数,如-3+5,请使用[+-]?\d+

re.findall('[+-]?\d+', 'sfkdjfsdfj-1skjfslkdjf+4')   # ['-1', '+4']

确保你将负号放在最后,这样编译器就会明白你不是别的意思。

答案 4 :(得分:0)

根据python re documentation,如果未设置UNICODE标志,\ d匹配任何数字。如果设置了该标志,则它匹配该区域设置中被认为是数字的任何内容。

虽然没有一些补充,但它不会匹配负数:

-?\d+

这有效,但没有任何数字,因为数字是非常复杂的小事。 试试这个:

[-+]?\d*\.?\d+([eE][-+]?\d+)?