簡體   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