Python 替换除数字之间的逗号

Python 替换除数字之间的逗号,python,regex,Python,Regex,我需要替换除数字之间的逗号(忽略空格)以外的所有逗号。例如: 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, 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
逻辑:

  • 请勿更换前后的if编号
  • 更换之前的if编号
  • 更换后的if编号
  • 如果周围没有数字,请更换
我尝试过消极前瞻和消极前瞻:

#正则表达式:
# (?
但在以下情况下,这种方法是行不通的:

foo,5  => foo,5
foo ,5 => foo ,5
我感觉很接近,提前感谢您的帮助。

您可以使用

re.sub(r'(\d\s*,)(?=\s*\d)|,',r'\1',文本)
详情如下:

  • (\d\s*,)(?=\s*\d)
    -一个数字、零个或多个空格和一个逗号,捕获到组1中(替换模式中的
    \1
    指该值),后面跟零个或多个空格和一个数字
  • |
    -或
  • -任何其他上下文中的逗号
见:

重新导入
字符串=['foo,bar 12,6','foo,bar 12,6','foo,bar 12,6','foo,bar 12','foo,bar 6','foo,bar 5','foo,5']
对于字符串中的s:
打印(s',=>',re.sub(r'(\d\s*,)(?=\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
使用PyPi regex模块,您可以使用

\d+(?:\s*,\s*\d+(*跳过)(*F)|,
请参见。此处,
\d+(?:\s*,\s*\d+(*SKIP)(*F)
匹配一个或多个数字,然后匹配一个或多个逗号,其中包含零个或多个空格,然后是一个或多个数字,由于
(*SKIP)(*F)
动词,整个字符序列将被丢弃,下一次搜索将在失败位置开始

见:

导入正则表达式
rx=regex.compile(r'\d+(?:\s*,\s*\d+)(*跳过)(*F)|,'))
进口稀土
字符串=['foo,bar 12,6','foo,bar 12,6','foo,bar 12,6','foo,bar 12','foo,bar 6','foo,bar 5','foo,5']
对于字符串中的s:
打印,'=>',rx.sub('',s))

很好的Wiktor。我试过:
(\d\s*,\s*\d)|,
,它说它需要更少的步骤。这可能会更可取吗?@JvdV不,这不是步骤的问题。数字之间所有可以用空格分隔的逗号都必须保留。这将导致删除的逗号多于。