试图保持这个简单,但我认为我现在复杂了正则表达式:
基本上,我想删除字符串中的所有数字 - 但考虑到可能有逗号或小数。
示例:
$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)
答案 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,]
。.
或%
。