2015-02-11 128 views
1

我想從模式重複幾次的法律文本中提取一些字符串。獲取與正則表達式最短匹配 - 懶惰量詞

我不確定我明白懶惰量詞(?)是如何工作的。從我閱讀的內容來看,它應該儘可能少地使用字符來捕捉比賽。但它似乎沒有這樣做,在我的例子如下:

對不起,西班牙文的文字,但我想它是很簡單,足以遵循。

... POR LA afirmativa.losseñoresjueces doctores genoud,打者,德 拉扎裏,roncoroniÿ索里亞,POR洛杉磯mismos fundamentos德拉塞尼奧拉 jueza doctora高根,votaron洛杉磯西甲cuestion planteada tambien POR LA negativa.a la tercera cuestion planteada,laseñorajueza doctora kogan dijo:..(text)... voto por la afirmativa.losseñoresjueces doctores genoud e hitters,por los mismos fundamentos de laseñora jueza doctora kogan, votaron la tercera cuestion planteada por la afirmativa.a la tercera cuestion planteada,elseñorjuez doctor de lazzari dijo:...

我試圖捕捉字符串 「洛杉磯señoresjueces」(4號線)和 「votaron拉tercera cuestion planteada POR LA afirmativa」 之間的文本。這個模式有兩個匹配,因爲字符串「losseñoresjueces」出現兩次,一次在開始,然後在第四行。

所以我嘗試使用懶惰量詞(。*?)來獲得最短的2場比賽:

(los señores jueces(.*?)votaron la tercera cuestion planteada por la afirmativa) 

但它似乎沒有工作,它的最長的字符串相匹配,從第1行,而不是從第二(最短)發生開始。我正在測試的正則表達式https://regex101.com/

Apreciate任何幫助。

謝謝。

+0

這不是懶惰的量詞是如何工作的。事實上,懶惰的量詞在這裏沒有任何幫助。 – 2015-02-11 15:03:19

+1

延遲量詞影響如何從_current position_中的一組可能匹配中選擇匹配。它不會影響匹配位置的選擇 - 它總是最左邊的一個。所以RE引擎掃描你的字符串,找到「begin」字符串,進一步掃描,直到它遇到「結束」字符串,停在那裏,並沒有進一步嘗試找到「更好」的匹配。 – georg 2015-02-11 15:07:15

+0

感謝您澄清georg,我誤解了懶惰量詞的使用。 – 2015-02-11 15:16:42

回答

2

使用負向前視強制正則表達式引擎在匹配每個字符之前檢查是否存在字符串los señores jueces

los señores jueces((?:(?!los señores jueces).)*?)votaron la tercera cuestion planteada por la afirmativa 

DEMO

+0

謝謝Avinash!完美的作品。似乎展望未來將解決我的大部分問題。我將此標記爲已回答。 RGDS。 – 2015-02-11 15:15:14

+0

我使用負向視圖中的第一部分,也可以使用最後一部分。 – 2015-02-11 15:16:23