我在python2.7中使用正则表达式来匹配字符串中的数字,但我不能匹配表达式中的单个数字,这里是我的代码
import re
import cv2
s = '858 1790 -156.25 2'
re_matchData = re.compile(r'\-?\d{1,10}\.?\d{1,10}')
data = re.findall(re_matchData, s)
print data
然后打印:
['858', '1790', '-156.25']
但是当我从
更改表达式时re_matchData = re.compile(r'\-?\d{1,10}\.?\d{1,10}')
到
re_matchData = re.compile(r'\-?\d{0,10}\.?\d{1,10}')
然后打印:
['858', '1790', '-156.25', '2']
d {1,10}和d {0,10}之间是否有任何混淆? 如果我做错了,怎么纠正呢? 谢谢你查看我的问题!
答案 0 :(得分:2)
试试这个:
r'\-?\d{1,10}(?:\.\d{1,10})?'
使用(?:)?
使小数部分可选。
对于r'\-?\d{0,10}\.?\d{1,10}'
,匹配\.?\d{1,10}
的{{1}}。
答案 1 :(得分:1)
第一个\d{1,10}
匹配1到10位数,第二个\d{1,10}
也匹配1到10位数。为了使它们都匹配,您的号码至少需要2位数字,并且它们之间可选.
。
您应该将整个分数设为可选,而不仅仅是.
。
r'\-?\d{1,10}(?:\.\d{1,10})?'
答案 2 :(得分:0)
我宁愿做如下:
import re
s = '858 1790 -156.25 2'
re_matchData = re.compile(r'\-?\d{1,10}\.?\d{0,10}')
data = re_matchData.findall(s)
print data
输出:
['858', '1790', '-156.25', '2']