0

试图保持简单,但我想我现在已经复杂化了正则表达式:

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

例子:

$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)
4

3 回答 3

2

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

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

这应该适用于您的所有示例,除了$13.95 -> 13我需要澄清推理。如果您需要识别负数、浮点数、科学记数法等,则必须对其进行调整。

于 2012-07-04T02:12:38.267 回答
0

适用于每种情况。对.事物进行了回顾

>>> u''.join(re.findall(ur'(?<!\.|\d)(\d+)', '$13.95'))
'13'
于 2012-07-04T02:14:52.977 回答
0

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

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

字面意思:

  • 可以有美元符号
  • 抓住所有[0-9,]的数字和逗号。
  • 如果没有更多的数字、a.或 a%出现,则停止。
于 2012-07-04T02:24:09.910 回答