2016-11-30 2 views
1

Я написал простой скрипт для сканирования каталога для типа файла (.htm), откройте их. и замените некоторый текст. Этот скрипт отлично работает на моем домашнем компьютере (Python 2.7.12), но не на моем рабочем компьютере (Python 2.7.8), и я не могу понять, почему. Он просто не находит совпадений. Файлы он смотрит на это тот же формат, кодирование и т.д.выражение regex работает в Python 2.7.12, но не Python 2.7.8

Выражение:

core = re.compile(r'(.*?)(FeatureCatalogue_Core_v??4\.\d_20[123]\d-??[01]\d-??[0123]\d)(.*?)') 

"FeatureCatalogue_Core_v4.4_2016-12-31" должен соответствовать

"FeatureCatalogue_Core_4.4_20161231" должен соответствовать

«FeatureCatalogue_Core_v5.0_2017-12-31» не должен соответствовать

Я уверен, что я что-то простого или моему expre отсутствую ssion не совсем прав, но я просто не вижу этого.

+0

Регулярное выражение хорошо. Есть что-то еще, что предотвращает правильное выполнение скрипта. Обратите внимание, что вы можете заменить все '??' на '?', А '.' после' 4' должны быть экранированы. –

+0

Как @ WiktorStribiżew указывает, [** ваше регулярное выражение работает **] (https://regex101.com/r/6AYjjz/1) - вот [** оптимизированная версия **] (https://regex101.com/r/6AYjjz/2). – Jan

ответ

0

Я решил проблему. На самом деле он находил матчи. Условие «break» не работает. Я придумал решение, используя счетчик, поэтому после стольких успешных попыток он сломается.

for x,y,z in os.walk(pathTRD): 
    for doc in z: 
     Path = os.path.join(x,doc) 
     if Path.endswith('.htm'): 
      dataR = open(Path, 'r') 
      filedata = dataR.read() 
      dataR.close() 
      for line in filedata.split(None): 
       for q in Qs: 
        mtch = re.match(q, line) 
        try: 
         Keys1.append(str(mtch.group(2))) 
         winLoop += 1 
        except: 
         pass 
     if winLoop > 6:#<--- this isn't how wanted to do this, but the work computers are being dumb 
        break 
     seekLoop += 1 
Смежные вопросы