[英]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.