[英]Getting different behavior between regex results on Windows vs Linux
[英]different regex behavior when compiled
我現在凝視着這一段時間,希望我能遺漏一些明顯的東西。 希望有人能夠向我指出這一點。 我正在使用以下正則表達式以純文本格式查找文件路徑:
p = re.compile(r'(([A-Za-z]:[\\/])|(\.\.[\\/])+)([A-Za-z0-9\-_]+[\\/])+[A-Za-z0-9\-_]+\.[a-zA-Z]+')
我知道這很可怕,但是可以。 至少; 當我運行我的python腳本時。 我需要編譯為exe才能具有獨立的功能,並且為此使用了以下內容:
from distutils.core import setup
import py2exe
import os
taggerData = [('nltk_data/taggers', ['C:/Users/username/AppData/Roaming/nltk_data/taggers/conll2000_aubt.pickle'])]
setup(
console=[{'script': 'flurp.py'}],
options={
'py2exe':
{
'bundle_files': 2,
'includes': ['lxml.etree', 'lxml._elementpath'],
'compressed': True,
'excludes': ['_ssl'],
}
},
zipfile = None,
data_files=taggerData
)
現在,當我有類似“ C:\\ some \\ file \\ path \\ here.txt”的文件時; 當我運行python腳本時,它確實得到了匹配。 但是,當我編譯我的腳本然后運行時,我沒有得到相同的匹配。 為了完全重現此代碼,需要花費一些時間/工作來生成最小的腳本,所以基本上我只是想知道是否有人遇到過類似的問題,正則表達式在編譯時的行為不同(使用py2exe(0.9.2.2))?
在對我的正則表達式進行了一些試驗之后,事實證明以下方法可行:
p = re.compile(r'(([A-Za-z]:[\\/]+)|(\.\.[\\/]+)+)([A-Za-z0-9\-_]+[\\/]+)+[A-Za-z0-9\-_]+\.[a-zA-Z]+')
唯一的區別是在字符類[\\ /]之后添加了+(例如,反斜杠或正斜杠)。 這不是一個出色的解決方案,因為它會導致我的正則表達式不太精確,但是兩次轉義對我也沒有幫助。
我希望這可以幫助其他有同樣問題的人。 但是由於我的解決方案感覺不太好,因此我將讓其他人對此問題發表評論,或者也許再詳細解釋一下這里發生了什么(或者是否只是py2exe中的已知錯誤?)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.