2017-05-09 132 views
2

我正在處理一系列運輸系統的大寫字母數量不足的站點名稱,並且希望刪除「at」和「the」等單詞的大寫字母。到目前爲止,我可以匹配我想要的所有實例,但我無法弄清楚如何在字符串的開始處發生匹配實例的而不是。 (即防止改變「物」到「事」)替換字符串開始處以外的所有子字符串實例

這裏是我到目前爲止的代碼:

>>>re.sub("(?i)(?<!\w)the(?!\w)", "zzz", "The Thing To The Theme of Athens, (The) Goethe") 
'zzz Thing To zzz Theme of Athens, (zzz) Goethe' 

而且他是我目前的解決方法:

>>>re.sub("(?i)(?<![\w|])the(?!\w)", "zzz", "|" + "The Thing To The Theme of Athens, (The) Goethe")[1:] 
'The Thing To zzz Theme of Athens, (zzz) Goethe' 

這種解決方法顯然是不理想的,因爲我寧願有一個「純粹」的正則表達式解決方案。

回答

2

您可以用積極的變化更換負回顧後\w\W

(?i)(?<=\W)the(?!\w) 
    ^^^^^^^ 

(?<!\w)負回顧後可以作爲(?<=^|\W)(在Python不工作,BTW),我們只需要把^替代它。 (?<=\W)肯定看後面的要求立即在t的左側有一個非單詞字符。請參閱regex demo

Python demo

import re 
res = re.sub(r"(?i)(?<=\W)the(?!\w)", "zzz", "The Thing To (The) Theme of Athens, The Goethe") 
print(res) # => The Thing To (zzz) Theme of Athens, zzz Goethe 
+1

那是快。謝謝! – Zoetrophy

相關問題