2015-07-27 3 views
0

Я смотрю на это какое-то время, и надеюсь, что я упустил что-то очевидное. Надеюсь, кто-то сможет это указать мне. Я использую следующее регулярное выражение для поиска путей файлов в незашифрованном:поведение разных регулярных выражений при компиляции

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: \ некоторый \ файл \ путь \ here.txt» ; он получает совпадение, когда я запускаю свой скрипт python. Однако, когда я скомпилирую свой скрипт, а затем запустил, я не получаю такой же совпадение. Мне потребуется некоторое время/работа, чтобы создать минимальный скрипт, чтобы воспроизвести именно это, так что в основном мне просто интересно, сталкивался ли кто-либо с подобными проблемами, причем регулярные выражения ведут себя по-разному при компиляции (с py2exe (0.9.2.2))?

+0

@jonsharpe Почему вы чувствуете необходимость быть грубым? Вопрос ясен, как он есть, и вежливо спросил. Если вы не знаете ответа, как я этого не делаю, продолжайте. – saulspatz

+0

Было бы неплохо, если бы вы указали, какую версию py2exe вы используете, и попытались ли вы использовать другую версию py2exe – nhahtdh

+0

спасибо за отзыв, добавлена ​​версия в вопросе – Igor

ответ

0

После нескольких экспериментов с моим регулярным выражением, оказалось, что следующие работы:

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

С той лишь разницей, добавленная + после моего персонажа класса [\ /] (например, обратной косой или прямой слэш). Не блестящее решение, так как это заставляет мое регулярное выражение быть менее точным, но двойное экранирование мне тоже не помогло.

Я надеюсь, что это поможет другим, имеющим ту же проблему. Но поскольку мое решение не очень прилично, я оставляю вопрос открытым для других людей, чтобы прокомментировать/возможно объяснить немного более подробно, что здесь происходит (или это просто известная ошибка в py2exe?)