由于某些原因,我在某些情况下无法完全提取美元金额。
例如,我正在使用以下字符搜索字符串:
“每盒$ 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”(正确)
我摆弄着东西,尝试了更加贪婪的表情和更具体的表达方式,但是我错过了一些东西?
答案 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。