簡體   English   中英

python re.findall 和 re.sub

[英]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',字符串不變。 我很困惑為什么,請幫助。

findallsub工作方式有所不同。 根據docsre.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM