题:

我是python的初学者,并且使用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:


您可以看到此工作at regex101



如果要确保将repeat整体匹配,而不是像repeatable这样的较大单词的一部分,可以使用\b特殊字符,该特殊字符:


  匹配空字符串,但仅在单词的开头或结尾…


regex_rep = r"\brepeat\b"


您可以在操作at regex101中看到它。

10-06 01:21
查看更多