我有一個字符串:括號中刪除文本,除非文本中包含關鍵字
的text1(密鑰)文本2
文本1(按鍵)文本2(其它文本)
[關鍵]文本。 。文字.. [其它文本]
等
我要重新用「括號」移動「其他文本」,但不能移動(鍵)和[鍵]。
(鍵),[鍵]將永遠是相同的。始終「關鍵」。
我有這樣的代碼,每一個括號,括號,大括號匹配這...
\(.*?\)|\[(.*?)\]|\{(.*?)\}
我只是想從比賽排除[關鍵](鍵)。 這可能嗎?
謝謝。
我有一個字符串:括號中刪除文本,除非文本中包含關鍵字
的text1(密鑰)文本2
文本1(按鍵)文本2(其它文本)
[關鍵]文本。 。文字.. [其它文本]
等
我要重新用「括號」移動「其他文本」,但不能移動(鍵)和[鍵]。
(鍵),[鍵]將永遠是相同的。始終「關鍵」。
我有這樣的代碼,每一個括號,括號,大括號匹配這...
\(.*?\)|\[(.*?)\]|\{(.*?)\}
我只是想從比賽排除[關鍵](鍵)。 這可能嗎?
謝謝。
[({\[](?!key).*?[)\]}]
您可以this.See演示很容易做到這一點。
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)
謝謝,它的工作原理。 – user3052737 2015-02-10 09:24:50
@ user3052737很高興工作 – vks 2015-02-10 09:25:17
爲什麼downvvoted ??????????? – vks 2015-02-10 10:10:01
您需要使用負向視向斷言。 \((?!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']
如果是固定的文本,而不是一個模式,你不需要正則表達式。 – Maroun 2015-02-10 07:31:42
您的預期產出是? – 2015-02-10 07:32:03
@codeMan否,'[^ key]'不匹配'k','e'或'y',而不是'key'作爲關鍵字。 – Maroun 2015-02-10 07:33:35