编译时的不同正则表达式行为

时间:2015-07-27 09:54:08

标签: python regex py2exe

我现在盯着这一段时间了,希望我错过了一些明显的东西。希望有人能够指出这一点。 我正在使用以下正则表达式以明文方式查找文件路径:

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))?

1 个答案:

答案 0 :(得分:0)

在对我的正则表达式进行一些实验后,发现以下情况有效:

p = re.compile(r'(([A-Za-z]:[\\/]+)|(\.\.[\\/]+)+)([A-Za-z0-9\-_]+[\\/]+)+[A-Za-z0-9\-_]+\.[a-zA-Z]+')

唯一的区别是在我的角色类[\ /]之后添加+(例如反斜杠或正斜杠)。这不是一个出色的解决方案,因为它会导致我的正则表达式不那么精确,但是双重逃避对我也没有帮助。

我希望这有助于其他人遇到同样的问题。但是,由于我的解决方案感觉不太合适,我会留下让其他人评论的问题,或者更详细地解释一下这里发生了什么(或者它只是py2exe中的一个已知错误?)< / p>