Python regex-合并重复的连续字,保留最后一个空格
我有一根这样的绳子Python regex-合并重复的连续字,保留最后一个空格,python,regex,Python,Regex,我有一根这样的绳子 {{TAG}}{{TAG}}{{{TAG}}}{{TAG}}一些其他文本。{{TAG}}{{TAG}} 我正在尝试将多个连续出现的{{TAG}合并为一个。因此,我有一个正则表达式re.sub(r'({{TAG}})\s*)+,“{{TAG}}”,text),它可以很好地删除多个匹配项,并给出了这个结果 {{TAG}}一些其他文本。{{TAG}} re.sub('({{TAG}}(?:\s*{{TAG}})*)', '{{TAG}}', text) 但它在最后占用了一个额外的
{{TAG}}{{TAG}}{{{TAG}}}{{TAG}}一些其他文本。{{TAG}}{{TAG}}
我正在尝试将多个连续出现的{{TAG}
合并为一个。因此,我有一个正则表达式re.sub(r'({{TAG}})\s*)+,“{{TAG}}”,text)
,它可以很好地删除多个匹配项,并给出了这个结果
{{TAG}}一些其他文本。{{TAG}}
re.sub('({{TAG}}(?:\s*{{TAG}})*)', '{{TAG}}', text)
但它在最后占用了一个额外的空间,我正试图避免。这样我就可以
{{TAG}}一些其他文本。{{TAG}}
发现了一个类似的问题,但这并没有解决我的问题。有什么建议可以改进我的正则表达式或python中的任何其他替代方法吗?一个简单的方法是,您可以将正则表达式拆分为两个,而不是
+
>>> re.sub(r'(?:{{TAG}}\s*)*{{TAG}}', r'{{TAG}}', string)
'{{TAG}} some other text. {{TAG}}'
将零个或多个(?:{{TAG}}\s*)*
与末尾的空格匹配{{TAG}}
匹配最后一个{{TAG}}
,不带任何空格{{{TAG}}
你也可以用积极的前瞻来解决这个问题
>>> re.sub(r'{{TAG}}\s*(?={{TAG}})', r'', string)
'{{TAG}} some other text. {{TAG}}'
匹配一个{{TAG}}\s*
后跟空格{{{TAG}}
正向前瞻。检查在上述点中匹配的(?={{TAG}}
是否后跟另一个{{TAG}}
{TAG}
+
>>> re.sub(r'(?:{{TAG}}\s*)*{{TAG}}', r'{{TAG}}', string)
'{{TAG}} some other text. {{TAG}}'
将零个或多个(?:{{TAG}}\s*)*
与末尾的空格匹配{{TAG}}
匹配最后一个{{TAG}}
,不带任何空格{{{TAG}}
你也可以用积极的前瞻来解决这个问题
>>> re.sub(r'{{TAG}}\s*(?={{TAG}})', r'', string)
'{{TAG}} some other text. {{TAG}}'
匹配一个{{TAG}}\s*
后跟空格{{{TAG}}
正向前瞻。检查在上述点中匹配的(?={{TAG}}
是否后跟另一个{{TAG}}
{TAG}
{{{TAG}}\s*
一次或多次,但您希望匹配{{TAG}
一次,然后是零个或多个\s*{{TAG}
实例
re.sub('({{TAG}}(?:\s*{{TAG}})*)', '{{TAG}}', text)
您正在一次或多次匹配
{{{TAG}}\s*
,但您希望匹配{{TAG}}
一次,然后是\s*{{TAG}}
的零个或多个实例
re.sub('({{TAG}}(?:\s*{{TAG}})*)', '{{TAG}}', text)