[英]python re.findall and re.sub
我的代碼:
import re
print(re.findall(r'(?=(Deportivo))(?!.*\bla\b)','Deportivo coruna'))
print(re.sub(r'(?=(Deportivo))(?!.*\bla\b)','','Deportivo coruna'))
如果字符串中沒有 'la',我有興趣刪除 'Deportivo'。
例如:
re.findall(r'(?=(Deportivo))(?!.*\bla\b)','Deportivo coruna')
返回 ['拉科魯尼亞'] 和
re.findall(r'(?=(Deportivo))(?!.*\bla\b)','Deportivo la coruna')
返回 []
然而,
re.sub(r'(?=(Deportivo))(?!.*\bla\b)','','Deportivo coruna')
返回 'Deportivo coruna',字符串不變。 我很困惑為什么,請幫助。
findall
和sub
工作方式有所不同。 根據docs , re.findall()
將返回捕獲組的內容,即使匹配結果本身是空字符串(在您的情況下也是如此,因為正則表達式完全由前瞻斷言組成)。
因此,如果您想從文本中刪除Deportivo
當且僅當它不包含la
,您可以使用
re.sub(r'^(?!.*\bla\b)(.*?)Deportivo)',r'\1','Deportivo coruna')
但是,這只會刪除第一次出現,並且更改它並不容易,因為您需要在后視斷言中無限重復,而 Python 不支持。 作為記錄,
re.sub(r'^(?<!\bla\b.*)Deportivo(?!.*\bla\b)','','Deportivo coruna')
會做到這一點,但該正則表達式不會在 Python 中編譯。
所以你最好的辦法可能是分兩步完成。 首先,檢查您的字符串是否不包含la
。 然后將所有Deportivo
替換為空字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.