簡體   English   中英

非貪心超前正則表達式

[英]Non-greedy lookahead regex

我有一個文件需要從Python中提取一些數據。 其結構如下:

.I 1
.T
some multiline text
.A
some multiline text
.B
some multiline text
.W
some multiline text
.I 2
.T
some multiline text
.A
some multiline text
.B
some multiline text
.W
some multiline text

如您所見,這里有一些重復的重復模式。 我需要一一提取它們。 這是我的eegex:

\.I\s(\d*)\n       # .I section
\.T\n([\d\D]*?)    # .T section
\.A\n([\d\D]*?)    # .A section
\.B\n([\d\D]*?)    # .B section
\.W\n([\d\D]*)     # .W section
(?=\.I\s+\d+)     # look ahead section, which behaves greedy

一切都很好,但是最后一節(前瞻)很貪心。 我需要一個非貪心的超前正則表達式,但找不到。

我們可以使用*?來應用非貪婪的行為*? +? {m,n}? 但我找不到(?=...)的語法

當我用此正則表達式搜索匹配項時,它只找到一個匹配項,而有兩個匹配項。 這是由於超前運算符的貪婪性質。 如何進行非貪婪的前瞻?

我看不出為什么前途的貪婪很重要,我希望以下方法能起作用:

\.I\s(\d*)\n
\.T\n([\d\D]*?)
\.A\n([\d\D]*?)
\.B\n([\d\D]*?)
\.W\n([\d\D]*?)
(?=\.I\s+\d+|$)

現在我考慮了一下,我認為WiktorStribiżew是正確的。 前瞻不能貪婪或懶惰:要么有匹配,要么沒有匹配,匹配的對象無關緊要。

暫無
暫無

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

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