Re.search в регулярных выражениях Python не работает, как задумано

1

ВОПРОС:

Я начинаю с python и использую regex engine python. Я могу сопоставить несколько образцов шаблонов регулярных выражений с моим семенным файлом, но, насколько это ни странно, я не могу сопоставить строки в файле примера, который содержит слово "repeat". Ниже приведен контекст моей проблемы. Что может быть причиной?

Пример текста:

import tset flash_read, flash_writ;

vector ( $tset, (XMOSI,XMISO,XSGLK,XSTRMSTRT,XSTRMSGLK,XSTRMGKEN,XXTALIN,XXTALGPUEN,XHV (XSTRM03,XSTRMO2,XSTRM01,XSTRIADO,XNSS3,XNSS2,XNSS1,XNSSOH, XTEGLOGK, XRXDATA, XRXENABLE, XTXDATA, XTXENABLE, XNRESET, ROOK, XTMS, XTDI, XTDO, XNTRST))

> flash_writ .d0000 .dFF 1 01 01 01 01 X 1; // write byte 0

> flash_writ .d0001 .dFF 1 0 1 0 1 01 01 X 1; // write byte 1

repeat 25> flash_writ .d0000 .d00 1 1 1 0001  0 1 X 1; // wait program time 
> flash_writ .d0002 .dFF 1 0 1 0 1 0 1 0 1 X 1; // write byte 0

> flash_writ .d0003 .dFF 1 0 1 0 1 0 1 0 1 X 1; // write byte 1

repeat 25> flash_writ .d0000 .d00 1 1 1 0001  0 1 X 1; // wait program time 
> flash_writ .d0004 .dFF 1 01 01 01 01 X1, 11 write byte 0

> flash_writ .d0005 .dFF 1 01 01 01 01 X1; // write byte 1

repeat 25> flash_writ .d0000 .d00 1 1 1 0001  0 1 X 1; // wait program time

Синтаксис Python Используется для поиска регулярных выражений:

regex_rep = r" repeat "

for num, eachline in enumerate(files_atp):

if re.search(regex_rep, eachline, flags=re.IGNORECASE) is not None:

      print eachline

ЭТО НЕ РАБОТАЕТ (не дает никаких совпадений)

Теги:

1 ответ

1

Ваша модель:

regex_rep = r" repeat "

Это будет соответствовать repeat слова с пробелом на каждом конце.

Но ваши строки выглядят так:

repeat 25> flash_writ .d0000 .d00 1 1 1 0001  0 1 X 1; // wait program time

Перед repeat пробела нет, поэтому он не соответствует вашему шаблону.

Трудно предложить, как это исправить, потому что я не уверен, почему вы помещаете эти пробелы в шаблон в первую очередь.


Если они там без причины, просто избавьтесь от них:

regex_rep = r"repeat"

Однако в этом случае вы вообще не используете какие-либо функции re, поэтому ваш тест будет лучше написан как:

if "repeat" in eachline:

Если они есть, чтобы сделать модель более удобным для чтения, и вы хотите re игнорировать пробелы, вы можете использовать VERBOSE флаг, чтобы сказать ему, чтобы игнорировать пробелы в вашей схеме:

if re.search(regex_rep, eachline, flags=re.IGNORECASE|re.VERBOSE) is not None:

Вы можете видеть, что это работает в regex101.


Если вы хотите, чтобы вы соответствовали repeat как целому слову, а не как часть большего слова типа repeatable, вы можете использовать специальный символ \b, который:

Соответствует пустой строке, но только в начале или конце слова...

regex_rep = r"\brepeat\b"

Вы можете увидеть это в действии в regex101.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню