在所有括号内替换小节元素

时间:2018-06-22 18:51:18

标签: python regex

所有具体的字母(例如“ A”)都需要替换成所有括号。

例如,

A. (AbbAAbb) .A. (bbAbbAbA) .A. (bbbbAbbbb)

我想用''替换括号中的所有'A',以这样结束:

A. (bbbb) .A. (bbbbb) .A. (bbbbbbbb)

有可能仅使用正则表达式吗?

2 个答案:

答案 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(?=[^)(]*\))

Live demo

Python代码:

re.sub(r"A(?=[^)(]*\))", "", str)