mystr = """{abc} [abc] (abc) ['abc'] ["abc"]"""
pattern = r'\babc\b'
mystr = re.sub(pattern, "nnn", mystr)
print(mystr)
# {nnn} [nnn] (nnn) ['nnn'] ["nnn"]
但是,我希望返回{nnn}[nnn](nnn)[abc'][abc]
如何忽略单引号或双引号?
mystr = """{abc} [abc] (abc) ['abc'] ["abc"]"""
pattern = r'\babc\b'
mystr = re.sub(pattern, "nnn", mystr)
print(mystr)
# {nnn} [nnn] (nnn) ['nnn'] ["nnn"]
但是,我希望返回{nnn}[nnn](nnn)[abc'][abc]
如何忽略单引号或双引号?
您可以使用一个正则表达式模式,该模式在大括号、方括号或圆括号中仅针对abc
个:
mystr = """{abc} [abc] (abc) ['abc'] ["abc"]"""
output = re.sub(r'([{(\[])abc([})\]])', r'\1nnn\2', mystr)
print(output) # {nnn} [nnn] (nnn) ['abc'] ["abc"]
对于只针对引用了not的元素的更通用的解决方案,请使用re.sub
和回调函数:
mystr = """{abc} [abc] (abc) ['abc'] ["abc"]"""
output = re.sub(r'([{(\[])(.*?)([})\]])', lambda m: m.group(1) + 'nnn' + m.group(3) if not re.search(r"^['\"].*['\"]$", m.group(2)) else m.group(), mystr)
print(output) # {nnn} [nnn] (nnn) ['abc'] ["abc"]