删除括号中的文本,除非文本包含关键字

时间:2015-02-10 07:29:39

标签: python regex python-2.7

我有字符串:

  

text1(key)text2

     

text1(key)text2(其他一些文字)

     

[key] text .. text .. [some text text]

     

等等

我想删除括号中的“其他一些文字”,但不删除(键)和[键]。

(键),[键]将始终相同。永远是“关键”。

我有这个代码,它匹配每个括号,parantheses,花括号......

\(.*?\)|\[(.*?)\]|\{(.*?)\}

我只想从匹配中排除[key](key)。 这可能吗?

感谢。

2 个答案:

答案 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']

DEMO

答案 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)
相关问题