ВОПРОС:
Я начинаю с 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
ЭТО НЕ РАБОТАЕТ (не дает никаких совпадений)
Ваша модель:
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.