python正则表达式中的Re.search没有按预期工作

时间:2018-06-18 04:09:28

标签: python regex

问题:

我是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

这不起作用(不产生任何匹配)

1 个答案:

答案 0 :(得分:1)

您的模式是:

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

如果他们在那里使图案更具可读性,并且您希望if re.search(regex_rep, eachline, flags=re.IGNORECASE|re.VERBOSE) is not None: 忽略这些空格,则可以使用VERBOSE标志告诉它忽略模式中的空格:

repeat

您可以看到此工作at regex101

如果您想确保将repeatable作为整个单词匹配,而不是像\b这样的较大单词的一部分,则可以使用regex_rep = r"\brepeat\b" 特殊字词性格,其中:

  

匹配空字符串,但仅限于单词的开头或结尾...

Dialog

您可以在行动at regex101中看到这一点。