任何数字的符号是什么? 就像我正在搜索字符串中的任何数字,正面或负面。 我一直在使用\ d +但是找不到0或-1
答案 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+)?