簡體   English   中英

編譯時的不同正則表達式行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM