我有字符串:
text1(key)text2
text1(key)text2(其他一些文字)
[key] text .. text .. [some text text]
等等
我想删除括号中的“其他一些文字”,但不删除(键)和[键]。
(键),[键]将始终相同。永远是“关键”。
我有这个代码,它匹配每个括号,parantheses,花括号......
\(.*?\)|\[(.*?)\]|\{(.*?)\}
我只想从匹配中排除[key](key)。 这可能吗?
感谢。
答案 0 :(得分:0)
您需要使用否定前瞻断言。 \((?!key\))(.*?)\)
断言在\(
符号后面没有字符key)
时,(
为负前瞻。如果是,则捕获()
括号内的内容。其他两个括号同样相同。
>>> s = """text1 (key) text2
text1 (key) text2 (some other text) {key}
[key] text.. text.. [some other text]"""
>>> re.findall(r'\((?!key\))(.*?)\)|\[(?!key\])(.*?)\]|\{(?!key\})(.*?)\}', s)
[('some other text', '', ''), ('', 'some other text', '')]
>>> m = re.findall(r'\((?!key\))(.*?)\)|\[(?!key\])(.*?)\]|\{(?!key\})(.*?)\}', s)
>>> [j for i in m for j in i if j]
['some other text', 'some other text']
答案 1 :(得分:0)
[({\[](?!key).*?[)\]}]
你可以用这个轻松完成。参见演示。
https://regex101.com/r/wX9fR1/23
textpop式
import re
p = re.compile(r'[({\[](?!key).*?[)\]}]', re.MULTILINE)
test_str = "\n\n text1 (key) text2\n\n text1 (key) text2 (some other text)\n\n [key] text.. text.. [some other text]\n\n and so on\n"
subst = ""
result = re.sub(p, subst, test_str)