对于任何数字, 就像我正在搜索任意数字的字符串,正面或负面。 我一直在使用\ d +但找不到0或-1正则表达式,找到字符串中的任意数字
回答
搜索正,负,和/或小数,你可以使用[+-]?\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))对于很酷的修复 –
\d
应该可以很好地匹配任何非负整数。 \d
相当于[0-9]
(任何单个数字字符),因此它当然不会与负数匹配。在这种情况下,添加一个可选的负号:
\-?\d+
\d
肯定会匹配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']
要匹配POSITI已经或负数,如-3
或+5
,使用[+-]?\d+
:
re.findall('[+-]?\d+', 'sfkdjfsdfj-1skjfslkdjf+4') # ['-1', '+4']
确保你最后把负号所以编译器理解你的意思不是别的东西。
根据python re documentation,如果未设置UNICODE标志,\ d会匹配任何数字。如果该标志被设置,则它匹配在该语言环境中被认为是数字的任何东西。
它不会没有一些补充,虽然匹配负数:
-?\d+
这工作,但没有得到任何数字,因为数字是相当复杂的小东西。 试试这个:
[-+]?\d*\.?\d+([eE][-+]?\d+)?
- 1. 正则表达式匹配任意字符串+ 8位数字
- 2. Java /正则表达式 - 在字符串中的任意位置查找字符
- 3. Java正则表达式查找任意字符串中的字符
- 4. 正则表达式任意ASCII字符
- 5. 正则表达式:找到字符串中的所有数字
- 6. 正则表达式:找到字符串中数字的出现
- 7. 正则表达式 - 在字符串中找到具体数字
- 8. 字符串找到数字的正则表达式
- 9. 正则表达式查找字符串中的字符串
- 10. Perl正则表达式从任意集合中查找字符
- 11. 正则表达式找到在运行时确定的任意字符串
- 12. 正则表达式查找字符串
- 13. Bash正则表达式:用任意数量的字符替换字符串
- 14. 正则表达式查找字符串中的字符串中的字符串
- 15. Javascript正则表达式,查找字符串中的数字
- 16. 正则表达式查找字符串中间的数字
- 17. 正则表达式问题 - 查找字符串中的数字
- 18. 正则表达式在字符串中查找字符串
- 19. 任意长度的字符串和空间正则表达式
- 20. 正则表达式在字符串中找到字
- 21. Java正则表达式找到字符串中的符号
- 22. 正则表达式如何从任意字符串中只提取数字
- 23. C#正则表达式查找字符串的字符串
- 24. Java正则表达式在字符串中查找数字
- 25. 正则表达式,在字符串中查找表达式。
- 26. 正则表达式在字符串上查找字母数字
- 27. 在字符串中找到字/字符串,我需要正则表达式吗?
- 28. 正则表达式使用正则表达式来找到子字符串
- 29. 正则表达式找到整数后的字符串
- 30. 在CMD中找到正则表达式中的字符串
试试'r“ - ?\ d +”'。编辑: - 不需要在'[]'外面转义' – Evpok
正则表达式不会根据它们的内容来读取事物,而是根据它们在什么字符类中进行读取,因此您需要一个可选的“ - ”字符来匹配负值。也就是说,\ d +绝对*应该*匹配0,它在\ d字符类'[0-9]'中。 – Dylnuge
“1.0e + 3”或“-123.456”怎么样?你也想匹配那些吗? –