Regex 如何替换任意半重复字符的字符串(Python)

Regex 如何替换任意半重复字符的字符串(Python),regex,string,python-3.x,Regex,String,Python 3.x,如何查找/替换以下字符串: “SS-SS” 这里我们使用符号作为任意字符。例如,我可能想用“aCOMb”替换“aSxSy SySxb”。我已经阅读了关于小组的内容,但这种方法似乎不起作用,例如,我尝试了: import re s = re.sub("S(.=\1)S(.=\2)+S\2S\1","SxSx+SySx","COM") print(s) 我认为应该将s打印为: >>> SxSx+SySx 因为据我所知,它不匹配,但它打印: >>> Com

如何查找/替换以下字符串: “SS-SS

这里我们使用符号作为任意字符。例如,我可能想用“aCOMb”替换“aSxSy SySxb”。我已经阅读了关于小组的内容,但这种方法似乎不起作用,例如,我尝试了:

import re

s = re.sub("S(.=\1)S(.=\2)+S\2S\1","SxSx+SySx","COM")
print(s)
我认为应该将s打印为:

>>> SxSx+SySx
因为据我所知,它不匹配,但它打印:

>>> Com

你需要使用反向引用

要匹配您描述的模式,请尝试以下操作:

import re
s = "abcSxSy-SySxdef"
m = re.match(".*S(?P<char1>.)S(?P<char2>.)-S(?P=char2)S(?P=char1).*", s)
print(m.group(0))  # Prints "abcSxSy-SySxdef"
print(m.groups())  # Prints "('x', 'y')"
具体地说,您希望替换“aSxSy SySxb”,以“xCOMb”结束。以下是一种方法:

print(re.sub(
    "(.*S)(?P<char1>.)S(?P<char2>.)-S(?P=char2)S(?P=char1)(.*)",
    "\g<2>COM\g<4>",
    "aSxSy-SySxb"))  # Prints "xCOMb"
打印(关于(
“(*S)(?P.)S(?P.)-S(?P=char2)S(?P=char1)(*”,
“\gCOM\g”,
“aSxSy SySxb”)#打印“xCOMb”

您的预期输出是什么?
“COM”
是输入。因为没有匹配项,所以您将COM作为输出。您的意思是
s=re.sub(“s(.)s(.)s\2S\1”、“COM”、“SxSx+SySx”)
@AvinashRaj I在这个特定示例中,我希望它返回的字符串保持不变,因为x=是的,我想是\1=\2.我把这些解释为组名。不幸的是,您的解决方案没有在应该的时候进行替换,即s=re.sub(“s(.)s(.)s+s\2S\1”、“COM”、“SxSy+SySx”)打印应产生>>>COM@WiktorStribiżew It go re.sub(模式_to_look_,值_to_替换模式_,字符串_输入)
print(re.sub(
    "(.*S)(?P<char1>.)S(?P<char2>.)-S(?P=char2)S(?P=char1)(.*)",
    "\g<2>COM\g<4>",
    "aSxSy-SySxb"))  # Prints "xCOMb"