如果逗号不是数字,则在逗号之间添加空格

时间:2014-01-21 15:05:36

标签: python regex

我目前正在使用Python在语料库中执行预处理,用于执行自然语言处理然后进行分类。我对使用任何库作为NLTK不感兴趣。在我学习的时候,我更喜欢这次自己做。

问题是,如果逗号之前或后面没有数字,我必须在句子中的逗号之间添加空格:

Input: "My car costs $10,000."
Output: "My car costs $10,000."

Input: "Oh, I forgot my keys."
Output: "Oh , I forgot my keys."

到目前为止我所拥有的是:

re.sub(r"(,+)", r' \g<1> ', sentence)

问题在于它没有考虑“数字约束”。我也测试过:

re.sub(r"[^\d](,+)", r' \g<1> ', sentence)

它确实忽略了数字,但是当检查普通句子(没有数字)时,它也匹配逗号前面的字符,它被空格替换为:

Input: "Oh, I forgot my keys."
Output: "O , I forgot my keys."

3 个答案:

答案 0 :(得分:2)

试试这个:

re.sub(r"(?<![\d])(,+)(?![\d])", r' \g<1> ', sentence)

这是使用名为lookahead and lookbehind的东西。这是有效的,因为前瞻或后瞻匹配的值不是匹配的一部分,因此不会被sub替换。

答案 1 :(得分:1)

使用负向前瞻和后视:

>>> r = re.compile(r'(?<!\d)(,)(?!=\d)')
>>> r.sub(r' \1', "My car costs $10,000.")
'My car costs $10,000.'
>>> r.sub(r' \1', "Oh, I forgot my keys.")
'Oh , I forgot my keys.'

答案 2 :(得分:0)

你要找的正则表达式就是这个,

(?=,)(?<!\d)

工作正则表达式示例:

http://regex101.com/r/iW0iZ4

这是一个零宽度匹配,所以你只需要用(空格)来重复,就是这样。