替换除数字之间的逗号

我需要替换除数字之间的逗号之外的所有逗号(忽略空格)。一些例子是:

foo, bar 12,6    => foo bar 12,6
foo, bar 12, 6   => foo bar 12, 6
foo, bar 12 ,6   => foo bar 12 ,6
foo, bar 12,     => foo bar 12
foo, bar ,6      => foo bar 6
foo,5            => foo5
foo ,5           => foo 5
foo, bar 12,6    => foo bar 12,6
foo, bar 12, 6   => foo bar 12, 6
foo, bar 12 ,6   => foo bar 12 ,6
foo, bar 12,     => foo bar 12
foo, bar ,6      => foo bar 6
foo,5            => foo5
foo ,5           => foo 5

逻辑:

  • 如果数字前后不替换
  • 替换之前的数字
  • 如果数字之后替换
  • 如果没有周围的数字,则替换

我尝试过消极前瞻和消极后视:

但这在以下情况下失败:

foo,5  => foo,5
foo ,5 => foo ,5

我觉得我很接近,在此先感谢您的帮助。

回答

您可以使用

re.sub(r'(ds*,)(?=s*d)|,', r'1', text)

请参阅正则表达式演示。细节:

  • (ds*,)(?=s*d)- 一个数字、零个或多个空格和一个捕获到组 11中的逗号(在替换模式中指的是这个值),后面跟着零个或多个空格和一个数字
  • | - 或者
  • , - 任何其他上下文中的逗号。

请参阅Python 演示:

import re
strings = ['foo, bar 12,6','foo, bar 12, 6','foo, bar 12 ,6','foo, bar 12,','foo, bar ,6','foo,5','foo ,5']
for s in strings:
    print(s, '=>', re.sub(r'(ds*,)(?=s*d)|,', r'1', s))

输出:

foo, bar 12,6 => foo bar 12,6
foo, bar 12, 6 => foo bar 12, 6
foo, bar 12 ,6 => foo bar 12 ,6
foo, bar 12, => foo bar 12
foo, bar ,6 => foo bar 6
foo,5 => foo5
foo ,5 => foo 5
foo, bar 12,6 => foo bar 12,6
foo, bar 12, 6 => foo bar 12, 6
foo, bar 12 ,6 => foo bar 12 ,6
foo, bar 12, => foo bar 12
foo, bar ,6 => foo bar 6
foo,5 => foo5
foo ,5 => foo 5

使用 PyPi 正则表达式模块,您可以使用

请参阅正则表达式演示。在这里,d+(?:s*,s*d+)+(*SKIP)(*F)匹配一个或多个数字,然后匹配一个或多个用零个或多个空格包围的逗号,然后是一个或多个数字,整个字符序列被丢弃,下一次搜索在失败位置开始,这要归功于(*SKIP)(*F)动词。

请参阅此 Python 演示:

d+(?:s*,s*d+)+(*SKIP)(*F)|,


以上是替换除数字之间的逗号的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>