繁体   English   中英

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

[英]Re.search in python regex not working as intended

题:

我是python的初学者并使用python的正则表达式引擎。 我能够将几个示例正则表达式模式与我的种子文件匹配,但奇怪的是,我无法匹配我的示例文件中包含“重复”一词的行。 以下是我的问题的上下文。 可能是什么原因?

示例文本:

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 中看到这一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM