【问题标题】:different regex behavior when compiled编译时的不同正则表达式行为
【发布时间】:2015-07-27 09:54:07
【问题描述】:

我现在盯着这个看了一会儿,希望我错过了一些明显的东西。希望有人能够向我指出这一点。 我正在使用以下正则表达式以纯文本形式查找文件路径:

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

【问题讨论】:

  • @jonsharpe 为什么你觉得需要粗鲁?这个问题很清楚,并且礼貌地问了出来。如果你不知道答案,我不知道,请继续。
  • 如果您包含您正在使用的 py2exe 版本,以及您是否尝试过使用不同版本的 py2exe,那就太好了
  • 感谢提示,问题中添加了版本

标签: python regex py2exe


【解决方案1】:

在对我的正则表达式进行了一些试验后,结果证明以下方法有效:

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

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

我希望这可以帮助其他遇到同样问题的人。但由于我的解决方案感觉不是很体面,我将把这个问题留给其他人评论/也许更详细地解释这里发生了什么(或者如果它只是 py2exe 中的一个已知错误?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 2011-05-30
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多