试图保持简单,但我想我现在使正则表达式复杂化:
基本上,我想从字符串中删除所有数字 - 但考虑到可能有逗号或小数。
例子:
$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)
非正则表达式的解决方案呢?
>>> s = '$1,300'
>>> ''.join([x for x in s if x.isdigit()])
'1300'
这应该适用于您的所有示例,除了我需要澄清推理的$13.95 -> 13
。 如果您需要识别负数,浮点数,科学记数法等,则必须对其进行调整。
适用于
每种情况。对.
的事情进行了一些回顾
>>> u''.join(re.findall(ur'(?<!.|d)(d+)', '$13.95'))
'13'
这个正则表达式应该完美匹配所有内容:
'$?([0-9,]+)[.%]?'
字面意思:
- 可以有一个美元符号
- 获取那里的所有数字和逗号
[0-9,]
。 - 如果没有更多数字,则停止,则显示
.
或%
。