re.sub(“。*”,“,”(replacement)“,“ text”)在Python 3.7上的替換次數(shù)翻倍
這不是一個錯誤,而是來自提交fbb490fd2f38bd817d99c20c05121ad0168a38ee的Python3.7中的錯誤修復(fù)。
在正則表達式中,非零寬度的匹配將指針位置移動到匹配的末尾,以便下一個斷言(無論是否為零寬度)都可以從匹配之后的位置繼續(xù)進行匹配。因此,在您的示例中,在.*貪婪地匹配并消耗了整個字符串之后,指針隨后移至字符串末尾的事實實際上仍然為該位置的零寬度匹配留有“余地”,這可以從以下代碼,在Python2.7、3.6和3.7中的行為相同:
>>> re.findall('.*', ’sample text’)[’sample text’, ’’]
因此,該錯誤修復(fù)程序是在非零寬度匹配之后立即替換零寬度匹配,現(xiàn)在可以用替換文本正確替換兩個匹配。
解決方法在Python 3.7(在Windows 64位上測試)上,使用RegEx替換字符串.*會使輸入字符串重復(fù)兩次!
在Python 3.7.2上:
>>> import re>>> re.sub('.*','(replacement)','sample text')’(replacement)(replacement)’
在Python 3.6.4上:
>>> import re>>> re.sub('.*','sample text')’(replacement)’
在Python 2.7.5(32位)上:
>>> import re>>> re.sub('.*','sample text')’(replacement)’
怎么了?如何解決?
相關(guān)文章:
1. 使用JAVA的串行化打造自己的“對象數(shù)據(jù)庫”2. 當使用cx_Freeze和tkinter時,我得到:“ DLL加載失敗:找不到指定的模塊。” (Python 3.5.3)3. PHP網(wǎng)站提速三大“軟”招4. vue商城中商品“篩選器”功能的實現(xiàn)代碼5. 為什么從類內(nèi)部訪問類變量需要“自我”。在Python中?6. 解決idea 拉取代碼出現(xiàn)的 “ Сannot Run Git Cannot identify version of git executable: no response“的問題7. PHP中for循環(huán)語句的幾種“變態(tài)”用法8. iOS 使用UITextField自定義搜索框 實現(xiàn)用戶輸入完之后“實時搜索”功能9. ASP中解決“對象關(guān)閉時,不允許操作。”的詭異問題……10. 駕馭“野馬”-- 探索Java SE 6的一些新特性
