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不,这不是步骤的问题。数字之间所有可以用空格分隔的逗号都必须保留。这将导致删除的逗号多于。