我試圖刪除字符\/<>~?`%
,如果它們出現在三個<
和>
之內。正則表達式匹配中的部分替換/刪除字符
對於字符串:
<html><body>Multiple <<<parameter>>> options %to <<<test/verify>>> in <<<one% g?o>>></body></html>
(讀起來就像Multiple <<<parameter>>> options %to <<<test/verify>>> in <<<one% g?o>>>
)。
最後一個字符串我想要的是:
<html><body>Multiple <<<parameter>>> options %to <<<testverify>>> in <<<one go>>></body></html>
注意的是,在 '%' '%to'不會被刪除,因爲它不在三個<
和之間的。
我想這些正則表達式的迄今:
>>> s = '<html><body>Multiple <<<parameter>>> options %to <<<test/verify>>> in <<<one% g?o>>></body></html>'
>>>
>>> # just getting everything between <<<and>>> is easy
... re.sub(r'((?:<){3})(.*?)((?:>){3})', r'\1\2\3', s)
'<html><body>Multiple <<<parameter>>> options %to <<<test/verify>>> in <<<one%? go>>></body></html>'
>>> re.findall(r'((?:<){3})(.*?)((?:>){3})', s)
[('<<<', 'parameter', '>>>'),
('<<<', 'test/verify', '>>>'),
('<<<', 'one%? go', '>>>')]
但試圖讓非\/<>~?`%
字符doesn't work序列因爲任何包含它只是被排除:
>>> re.findall(r'((?:<){3})([^\\/<>~?`%]*?)((?:>){3})', s)
[('<<<', 'parameter', '>>>')]
>>> re.findall(r'((?:<){3})((?:[^\\/<>~?`%]*?)*?)((?:>){3})', s)
[('<<<', 'parameter', '>>>')]
>>> re.findall(r'((?:<){3})((?:[^\\/<>~?`%])*?)((?:>){3})', s)
[('<<<', 'parameter', '>>>')]
你確實需要一個回調才能做到這一點。這是正確的選擇。 – sln
@sln好的,謝謝。將接受我的解決方案作爲答案。 – aneroid