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

2024-05-12 19:13:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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\此处.txt“当我运行python脚本时,它确实得到了匹配。然而,当我编译脚本然后运行时,我没有得到相同的匹配。为了准确地再现这一点,我需要花费一些时间/工作来生成一个最小的脚本,所以基本上我只是想知道是否有人遇到过类似的问题,正则表达式在编译时的行为不同(使用py2exe(0.9.2.2))?你知道吗


Tags: import路径re脚本datasetupfileslxml
1条回答
网友
1楼 · 发布于 2024-05-12 19:13:23

在对我的正则表达式进行了一些实验之后,发现以下方法是有效的:

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

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

我希望这能帮助其他有同样问题的人。但是,由于我的解决方案感觉不太像样,我将把这个问题留给其他人来评论/也许更详细地解释一下这里发生了什么(或者它是否只是py2exe中的一个已知bug?)你知道吗

相关问题 更多 >