正则表达式不匹配的整数

时间:2018-10-03 05:19:47

标签: python regex

由于某些原因,我在某些情况下无法完全提取美元金额。

例如,我正在使用以下字符搜索字符串:

  

“每盒$ 3,100,每整盒$ 3,000.00”

当前,我正在使用以下表达式:

\$(\d*\,\d+).?\d+\s+per\s?(?:full)?\s?box

box = r"\$(\d*\,\d+).?\d+\s+per\s?(?:full)?\s?box" 
boxs = re.findall(box, lines, re.I)

但我要返回:
第1组:“ 3,10”(应为3,100)
组2:“ 3,000”(正确)

我摆弄着东西,尝试了更加贪婪的表情和更具体的表达方式,但是我错过了一些东西?

5 个答案:

答案 0 :(得分:2)

我通过简单的修改就尝试了您的正则表达式,并且有效

尝试一下

GMSMapView

它应该输出这个

box = r"\$(\d*\,\d*).?\d*\s+per\s?(?:full)?\s?box"
boxs = re.findall(box, lines, re.I)

答案 1 :(得分:1)

a = "$3,100 per box, $3,000.00 per full box"
re.findall('\$(.*?)[per|\.]',a)

出局:

['3,100 ', '3,000']

答案 2 :(得分:0)

下面的正则表达式将解决

\$\d+(?:.(\d+))?

答案 3 :(得分:0)

我采取了一种方法,试图将数字(包括任何逗号或句点)当作另一位伪数字来吞噬:

>>> input="$3,100 per box, $3,000.00 per full box"
>>> box = r"\$([\d,\.]+)+\s+per\s?(?:full)?\s?box" 
>>> boxs = re.findall(box, input, re.I)
>>> boxs
['3,100', '3,000.00']

答案 4 :(得分:0)

我认为您的表达式要复杂得多,如果您只查找数字,而没有提到的小数,那么以下表达式应该可以工作:

>>> import re
>>>  
>>> m = re.compile('(?<=\$)([0-9]*(?:,)[0-9]*)')
>>> m.findall("$3,100 per box, $3,000.00 per full box, 41,500.00 quantity")
['3,100', '3,000']

基本上,它表示要查找前面带有美元字符的数字,以便仅捕获具有金钱价值的数字。您可以检查它here