Regex:多次保留模式的一部分[重复]

6gpjuf90  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(155)

此问题已在此处有答案

What is a regex to match a string NOT at the end of a line?(1个答案)
3天前关闭。
我想用正则表达式来替换“,”与“,”(逗号后跟空格),但不是在字符串的末尾:
“a,B,c,d”到“a,b,c,d”
而且
“柏林,伦敦,奥芬巴赫,杰拉”改成“柏林,伦敦,奥芬巴赫,杰拉”

“123,2345,653,12”至“123,2345,653,12”
我在Python中尝试

import re

re.sub(r'([1-9a-zA-Z]),([1-9a-zA-Z])', r'\1, \2', "a,b,c,d,")

但得到的结果是:
'a,B,c,d,'(“b”和“c”之间的逗号后缺少空格)
怎么了?

sqxo8psd

sqxo8psd1#

您可以简单地在,(?=.)上进行替换,这将只匹配未出现在输入末尾的逗号。

inp = "a,b,c,d,"
output = re.sub(r',(?=.)', ', ', inp)
print(output)  # a, b, c, d,
li9yvcax

li9yvcax2#

您可以使用,(?!$)匹配除行尾以外的任何逗号。

import re

print(re.sub(r',(?!$)', r', ', "a,b,c,d,")+'|')
a, b, c, d,|

|查看是否缺少尾随空格)
说明:

  • (?! ... )是一个负的前瞻。它检查前一个匹配没有被这个组的内容跟随。
  • $-表示字符串结束的元符号。

相关问题