Python Regex - 在字符串中用逗号查找数字

时间:2012-08-08 17:59:22

标签: python regex

我可能有一个字符串:

"Foo Bar, FooTown, $100,00" 

现在我需要用逗号分割该字符串,但这会错误地拆分它,因为$100,00也包含逗号。

所以我首先要查看字符串,是否有逗号的数字,如果有,请用逗号替换逗号。所以它看起来像:

"Foo Bar, FooTown, $100.00"

编辑:

它总是小数字,不会超过一个,.,但它可能是$ 1 $ 10 $ 100 $ 1000

字符串在,

之前可能有也可能没有空格

这是一条短信。

4 个答案:

答案 0 :(得分:7)

您可以使用

>>> re.sub(r"(\d),(\d)", r"\1.\2", "Foo Bar, FooTown, $100,00")
'Foo Bar, FooTown, $100.00'

答案 1 :(得分:2)

你也可以使用负向前瞻......那些超级强大的Python正则表达式机制中的大遗忘......

您可以使用前缀为数字或后跟数字的逗号分隔正常表达式

#!/usr/bin/env python

import re
samples=[
    "Foo Bar, FooTown, $100,00",
    "$100,00, Foo Bar, FooTown",
    "Foo Bar, $100,00, FooTown",
    "$100,00, Foo Bar, FooTown,",
]

myRegex=re.compile(",(?!\d)|(?<!\d),")

for sample in samples:
    print "%s sample splitted: %s (%s items)" % (sample, myRegex.split(sample), len(myRegex.split(sample)))

输出:

Foo Bar, FooTown, $100,00 sample splitted: ['Foo Bar', ' FooTown', ' $100,00'] (3 items)
$100,00, Foo Bar, FooTown sample splitted: ['$100,00', ' Foo Bar', ' FooTown'] (3 items)
Foo Bar, $100,00, FooTown sample splitted: ['Foo Bar', ' $100,00', ' FooTown'] (3 items)
$100,00, Foo Bar, FooTown, sample splitted: ['$100,00', ' Foo Bar', ' FooTown', ''] (4 items)

我为那些在Python中开发re模块的人感到非常抱歉......我看到这些前瞻用品几乎没有用过。

答案 2 :(得分:1)

使用(\d),(\d)的模式\1.\2的RegEx替换将起作用。 \d匹配任何数字,其周围的括号表示该数字将被记住,\1将与第一个匹配,\2将与第二个匹配。

答案 3 :(得分:1)

为什么不修复分割,而不是修复数据?

>>> import re
>>> s = "Foo Bar, FooTown, $100,00"
>>> re.split(r'(?<!\d),|,(?!\d)', s)
['Foo Bar', ' FooTown', ' $100,00']

这使用负向前瞻和后瞻断言来确保逗号不被数字包围。

编辑:将正则表达式从r'(?<!\d),(?!\d)'更改为r'(?<!\d),|,(?!\d)',以正确处理“$ 100,00,Foo Bar,FooTown”等字符串。感谢BorrajaX在评论中指出了我的错误。