re.sub(“。*”,“,”(replacement)“,“ text”)在Python 3.7上的替換次數(shù)翻倍
這不是一個(gè)錯(cuò)誤,而是來自提交fbb490fd2f38bd817d99c20c05121ad0168a38ee的Python3.7中的錯(cuò)誤修復(fù)。
在正則表達(dá)式中,非零寬度的匹配將指針位置移動(dòng)到匹配的末尾,以便下一個(gè)斷言(無(wú)論是否為零寬度)都可以從匹配之后的位置繼續(xù)進(jìn)行匹配。因此,在您的示例中,在.*貪婪地匹配并消耗了整個(gè)字符串之后,指針隨后移至字符串末尾的事實(shí)實(shí)際上仍然為該位置的零寬度匹配留有“余地”,這可以從以下代碼,在Python2.7、3.6和3.7中的行為相同:
>>> re.findall('.*', ’sample text’)[’sample text’, ’’]
因此,該錯(cuò)誤修復(fù)程序是在非零寬度匹配之后立即替換零寬度匹配,現(xiàn)在可以用替換文本正確替換兩個(gè)匹配。
解決方法在Python 3.7(在Windows 64位上測(cè)試)上,使用RegEx替換字符串.*會(huì)使輸入字符串重復(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. 在Ubuntu 12.04中的Python 2.7中導(dǎo)入Tensorflow時(shí)出錯(cuò)。“找不到GLIBC_2.17”2. PHP中for循環(huán)語(yǔ)句的幾種“變態(tài)”用法3. 詳細(xì)解讀PHP程序語(yǔ)言中“比較運(yùn)算符”4. 致PHP路上的“年輕人”5. 在 PHP 中用描點(diǎn)法“繪制”中文6. 如何解決錯(cuò)誤“錯(cuò)誤:命令錯(cuò)誤,退出狀態(tài)1:python。” 嘗試使用pip安裝django-heroku時(shí)7. Win10系統(tǒng)提示“Python 0x80070643安裝時(shí)發(fā)生嚴(yán)重錯(cuò)誤”怎么辦?8. Python-如何使用點(diǎn)“。” 訪問字典成員?9. 2008年我買了一本書 書名叫“PHP 6”10. iOS 使用UITextField自定義搜索框 實(shí)現(xiàn)用戶輸入完之后“實(shí)時(shí)搜索”功能
