例如,假設我想將以下文本中的每個單詞'a'更改爲'an':Python re.sub僅將字母「a」而不是字母「a」的每個實例更改爲
"a apple is a| awesome fruit."
假設「|」角色是作爲一個垃圾角色,需要解決。 我希望最終產品如下:
"an apple is an| awesome fruit."
到目前爲止,我已經得到最接近的是用下面的代碼:
>>> s = 'a apple is a| awesome fruit.'
>>> regex = '[^A-Za-z0-9](a)[^A-Za-z0-9]'
>>> s = re.sub(regex, 'an', s)
>>> s
'a apple isan awesome fruit.'
「A」顯示出在該年初增長字符串根本沒有受到影響,而由垃圾隨後發出的'a'則殘留在該區域中的字符串。我明白爲什麼會發生這種情況,我只是不知道如何讓正則表達式適合這種情況。我的計劃是隻改變子字符串組(a),但我不知道如何在re.sub中使用它。我怎樣才能替代子串組?有沒有更好的方法在這種情況下使用正則表達式模式?
確實!我只是爲了性能上的原因儘量避免使用lookaround :) – Jerry
@jerry與正則表達式匹配'(\ W | ^)a(\ W | $)'沒有任何不同。你確定你沒有考慮反向引用嗎? – U2EF1
外觀和捕捉需要多一點處理,因爲正則表達式必須首先錨定,然後匹配查找內的任何內容,然後再回來匹配任何匹配的內容。與[this](http://regex101.com/r/hI1tW0)相比,[this](http://regex101.com/r/wR2yT7/#debugger)更容易理解。我還提到了捕獲,因爲捕獲意味着腳本將不得不分配更多的內存來存儲捕獲。 (?<= \ W | ^)a(?= \ W | $)' – Jerry