簡體   English   中英

python多行正則表達式findall

[英]python multiline regex findall

我正在嘗試使用分隔符在多行文本中找到多個匹配項,以在 python 中使用正則表達式停止搜索......如果我需要的內容都在同一行,我的查詢很適合我要完成的任務: re.findall('([a-zA-Z]{3}\\d-[aAeE][rRsS]\\d.*), 輸出)

問題是,有時我試圖捕獲的附加數據不適合同一行並轉到下一行......是否有辦法將模式匹配設置為在找到下一個匹配項或命中時停止分隔符(= 在這種情況下)? 下面有兩個匹配項的簡化示例,我需要能夠同時捕獲...

例子

Port Id Description
3/2/4 Part of aggregate interface lag-4. Next device in path sea1-as2
lag-4, sea1-as2 3/1/2.

看來你所要做的就是添加[\\s\\S]*? 捕獲下一行中的任何內容並包括預期的停靠點, | . , | . 停止比賽。 請注意,使[\\s\\S]*? 懶惰,否則,它將匹配整個事情。

print(re.findall(r'([a-zA-Z]{3}\d-[aAeE][rRsS]\d[\s\S]*?\d)(?:,|\.)', output))

輸出

['sea1-as2 lag-4', 'sea1-as2 3/1/2']

你提到了[a-zA-Z][aAeE][rRsS] 有幾種方法可以設置re.IGNORECASE,這樣[ae][rs]就足夠了。

您沒有說清楚是使用re.MULTILINE還是在評估正則表達式之前刪除換行符。 你以.*結尾,這可能會變成

[^=]*

如果你想要一切都到=分隔符。

或者,在評估正則表達式之前,您可以在\\n換行符和=相等上拆分,因此您可以提交適當大小的塊進行評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM