所有具体的字母(例如“ A”)都需要替换成所有括号。
例如,
A. (AbbAAbb) .A. (bbAbbAbA) .A. (bbbbAbbbb)
我想用''替换括号中的所有'A',以这样结束:
A. (bbbb) .A. (bbbbb) .A. (bbbbbbbb)
有可能仅使用正则表达式吗?
答案 0 :(得分:5)
使用Python re
不能仅使用普通的正则表达式,而可以在re.sub
内部使用替换回调方法。
如果您要删除A
内的所有(...)
,则可以使用
re.sub(r'\([^()]+\)', lambda x: x.group().replace('A', ''), s)
在这里,\([^()]+\)
匹配(
,除(
和)
以外的1个以上字符,然后是)
,将匹配值传递给lambda表达式(x
)和匹配文本可通过m.group()
访问(如果您定义捕获组,则可以使用.group(n)
访问它们)。仅使用replace('A', '')
,您就可以满足您的需求。
请参见Python demo
如果使用PyPi正则表达式模块,则可以使用普通正则表达式完成相同操作:
regex.sub(r'(?<=\([^()]*)A(?=[^()]*\))', '', s)
请参见this Python demo。
这里,使用了环视功能,因为PyPi支持无限宽的lookbehinds。
答案 1 :(得分:5)
在这种情况下,有一个通用的解决方法-不应该存在不平衡/嵌套的括号。您寻找A
后面的圆括号,但不匹配圆括号:
A(?=[^)(]*\))
Python代码:
re.sub(r"A(?=[^)(]*\))", "", str)