Python正则表达式匹配字符串中的数字

时间:2018-06-01 03:28:09

标签: python regex

我在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}之间是否有任何混淆? 如果我做错了,怎么纠正呢? 谢谢你查看我的问题!

3 个答案:

答案 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']