如何查找/替换以下字符串: "< some_string> S< char 1> S< char 2> -S< char 2> S< char 1><一些字符串2>"?
这里我们使用符号<炭>作为一些任意的角色。例如,我可能想要替换" aSxSy-SySxb"用" aCOMb"。我已经阅读过群组,但这种方法似乎没有做到这一点,例如我尝试过:
import re
s = re.sub("S(.=\1)S(.=\2)+S\2S\1","SxSx+SySx","COM")
print(s)
我会将其打印为:
>>> SxSx+SySx
因为就我理解的群体而言它并不匹配,但它打印出来:
>>> Com
答案 0 :(得分:0)
您需要使用反向引用。
要匹配您描述的模式,请尝试以下操作:
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')"
替换模式是类似的,但当然这取决于您想要替换的内容。例如,要将所有出现的char2
替换为&#39; T&#39;,
print(re.sub(
"(.*S)(?P<char1>.)S(?P<char2>.)-S(?P=char2)S(?P=char1)(.*)",
"\g<1>\g<2>ST-STS\g<2>\g<4>", s)) # Prints "abcSxST-STSxdef".
具体来说,您想要替换&#34; aSxSy-SySxb&#34;这样你最终会得到&#34; xCOMb&#34;。这是一种方法:
print(re.sub(
"(.*S)(?P<char1>.)S(?P<char2>.)-S(?P=char2)S(?P=char1)(.*)",
"\g<2>COM\g<4>",
"aSxSy-SySxb")) # Prints "xCOMb"