正则表达式:在逗号之前,在美元符号之后,在百分比之前提取数字

时间:2012-07-04 01:59:50

标签: python regex math

试图保持这个简单,但我认为我现在复杂了正则表达式:

基本上,我想删除字符串中的所有数字 - 但考虑到可能有逗号或小数。

示例:

$13 -> 13
$13.95 -> 13
$1,300 -> 1300
$ 13 -> 13
Only 3 left -> 3
34 sold -> 34
34% -> 34
(45%) -> 45
($14) -> 14
£13 -> 13 (unicode u00A3)

python中的当前正则表达式:

re.match(ur"\$?\u00A3?(?:\s+)?((\d+)\,?(\d+)?)\%?(?:\.[0-9]*)?", value)

3 个答案:

答案 0 :(得分:2)

基于非正则表达式的解决方案呢?

>>> s = '$1,300'
>>> ''.join([x for x in s if x.isdigit()])
'1300'

这应该适用于您的所有示例,$13.95 -> 13除外,我需要澄清原因。如果你需要识别负数,浮点数,科学记数法等,你必须调整它。

答案 1 :(得分:0)

适用于每个案例。对.事物使用了一些lookbehind

>>> u''.join(re.findall(ur'(?<!\.|\d)(\d+)', '$13.95'))
'13'

答案 2 :(得分:0)

这个正则表达式应该完美匹配所有内容:

'\$?([0-9,]+)[.%]?'

字面含义:

  • 可以有美元符号
  • 抓住所有数字和逗号[0-9,]
  • 如果没有更多号码,则会停止.%