我正在尝试切换字符串中的两个元素,同时保持所有其他字符不变。这是一个例子:
原始字符串:
r'xyzA*12*pqR*stB*HS*lmN*opA*45*a4N*gB*SD*drtU*ghy'
要求的输出:
r'xyzA*HS*pqR*stB*12*lmN*opA*SD*a4N*gB*45*drtU*ghy'
请注意,A* 和 B* 之后的元素互换了。
我能够编译一个 RegEx 模式,让我可以像下面这样替换元素:
>>> import re
>>> pattern = re.compile(r'A\*(.*?)\*.*?B\*(.*?)\*')
>>> M = pattern.findall(string)
>>> M
[('12', 'HS'), ('45', 'SD')]
在这个阶段之后,我需要你的帮助来了解如何使用 sub 来获取所需的字符串。
最佳答案
一种选择是同时捕获两个感兴趣的模式之间的模式,并使用反向引用对它们重新排序:
s = r'xyzA*12*pqR*stB*HS*lmN*opA*45*a4N*gB*SD*drtU*ghy'
import re
pattern = re.compile(r'A\*(.*?)(\*.*?B\*)(.*?)\*')
#keep the position of the second group and switch the position of the first and third group
pattern.sub(r"A*\3\2\1*", s)
# 'xyzA*HS*pqR*stB*12*lmN*opA*SD*a4N*gB*45*drtU*ghy'
关于python - 如何使用 Python RegEx 切换字符串中的两个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42117857/