【发布时间】:2015-12-16 20:34:52
【问题描述】:
首先我不是正则表达式的专业人士,我一直依赖this cookbook、this tool 和this other tool
现在,当我尝试运行它 python 2.7.7 64bit win 8 时,它对这个示例文本没有任何作用
两周前,我冲向目标,花了 1,010.53 美元,获得了 300 积分。当我只有 1912.04 美元后查看余额时。
请注意,美元与金额 (USD1,010.53) 相连,在第一种情况下,每千位有一个逗号,但在第二种情况下,它没有与金额相连,千位 (USD) 没有逗号1912.04),在某些情况下,它们是一些整数但不是货币的值,仍然需要解析。(300 分)。
现在我设法得到了这个
[0-9]{1,3}(,[0-9]{3})*(.[0-9]+)?\b|.[0-9]+\b
现在我有两个问题:
- Python 不会为上述正则表达式和示例字符串返回任何值,但工具会这样做。
- 仅当每 1000 个位置有一个逗号时,正则表达式才会返回,即 1912.04 美元最终在在线工具上返回 912.04,不太确定如何让它同时使用逗号和非逗号。
regex = re.compile('[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?\b|\.[0-9]+\b')
mynumerics = re.findall(regex,'The final bill is USD1,010.53 and you will earn 300 points. Thank you for shopping at Target')
我期望的是三个项目:
=>['1,010.53', '300', '1912.04']
或者更好
=>[1010.53, 300, 1912.04]
相反,我得到的只是一个空列表。我可能会尝试下载不同版本的 python,但我知道我们部署的大多数产品都使用 2.7.X。所以我希望它不是版本问题。
【问题讨论】:
-
不是版本问题。我在 3.X 中尝试了您的代码,但仍然无法正常工作。此外,请尝试为您的
compile参数使用原始字符串,这样它就不会无意中将您的斜杠读取为转义序列的开头。 -
"现在我有两个问题:" (link) :^)
-
旁注:即使固定为“工作”,此模式也会看到
4400并返回400,或a123并返回123。这可能是个问题,因为如果4400应该被忽略,那么你不应该得到它的一部分(只是在前面添加\b会导致其他问题,所以比这更难),因为English digit grouping rules allow the omission of the comma when the value is four digits to the left of the decimal, between 1000 and 9999,所以4400应该被接受为“英文格式的数字”而不是。
标签: python regex python-2.7 text-parsing string-parsing