2015-12-21 2 views
2

Я хочу искать содержимое файла, используя регулярные выражения. Образец файла:Regexp работает с возвышенным текстовым поиском, но не с скрипта python

3 General 24 
3.1 CR IOT133 (ID: 194) 24 
3.1.1 Issue 24 
4 Integration 25 
4.11 CR IOT025 (ID: 125) 25 
10.27 CR IOT111 (ID: 176) 77 

И я хочу, чтобы извлечь часть IOTxxx (так линии 2, 5 и 6 в этом примере)

Мой скрипт:

import re 
fhandle = open("CR_headers.txt") 
inp = fhandle.read() 
crnumlist = re.findall('^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', inp) 
print crnumlist 

последний оператор печатает пустой список. Я тоже пытался запустить его с консоли, но результат тот же.

Если я использую возвышенную текстовую находку с вводом: ^\d{1}\.\d{1} CR (IOT\d{3}).*$ Я могу получить соответствующие линии.

Использование Python версии 2.7.10 и возвышенный текст 2 на окнах 7 коробка

Любые идеи о том, что я делаю неправильно будет весьма признателен. Thanx

+0

если я использую crnumlist = re.findall ('\ D {1,2} \ \ d {1,2} CR (ВГД \ d {. 3}) ', inp), но все же я хотел бы понять, что было не так с первым. – mariap

+0

Нужно ли 'regex' здесь? –

ответ

2

Вам просто нужно включить многострочный модификатор и определить ваше регулярное выражение как необработанную строку. Вы должны использовать многострочный модификатор, когда выполняются эти два условия.

  • Когда якорь ^, $ используются во входном регулярном выражении.
  • И когда строка ввода содержит более одной строки.

    crnumlist = re.findall(r'(?m)^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', inp) 
    

Пример:

>>> s = '''3 General 24 
3.1 CR IOT133 (ID: 194) 24 
3.1.1 Issue 24 
4 Integration 25 
4.11 CR IOT025 (ID: 125) 25 
10.27 CR IOT111 (ID: 176) 77''' 
>>> re.findall(r'(?m)^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', s) 
['IOT133', 'IOT025', 'IOT111'] 
>>> re.findall(r'^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', s) 
[] 
+0

Довольно просто, спасибо за помощь! – mariap

 Смежные вопросы

  • Нет связанных вопросов^_^