2015-10-15 29 views
0

嗨,大家好我是使用正則表達式的新手。所以如果我的一些問題很基本,請耐心等待。我需要過濾一個大文件的一些數據。 所述數據文件的一部分看起來像這樣matlab中的多線正則表達式

<abcd.....z> 
    <xyz123....etc..etc/> 
    <xyz123....etc..etc/> 
    . 
    . 
    many more 
    . 
    <xyz123....etc..etc/> 
</node> 
<abcd.....z/> 
<abcd.....z/> 
<abcd.....z/> 
<abcd.....z/> 
<abcd.....z> 
    <xyz123....etc..etc/> 
</node> 
<abcd.....z/> 

和此模式重複多次。

我的要求是獲得第一個<abcd.....z>以上的</node>以及它們之間的數據(即全部爲<xyz123....etc..etc/>)。

對於如 輸出1:

<abcd.....z> 
    <xyz123....etc..etc/> 
    <xyz123....etc..etc/> 
    . 
    . 
    many more 
    . 
    <xyz123....etc..etc/> 

輸出2:

<abcd.....z> 
    <xyz123....etc..etc/> 

我已經使用這個積極的向前看運營商

<abcd.*?>(?=</node>) 

但是這個主要的問題是,輸出包括<abcd.....z>,其中沒有<xyz123....etc..etc/>在他們下面。 即輸出如下 輸出1:

<abcd.....z> 
    <xyz123....etc..etc> 
    <xyz123....etc..etc> 
    . 
    . 
    many more 
    . 
    <xyz123....etc..etc> 

輸出2:

<abcd.....z/> 
<abcd.....z/> 
<abcd.....z/> 
<abcd.....z/> 
<abcd.....z> 
    <xyz123....etc..etc> 
</node> 

如果您在輸出2請注意,我不需要前4 <abcd.....z/>的。我只需要最後一個即。輸出必須是

<abcd.....z> 
    <xyz123....etc..etc> 

再次對不起長時間的帖子,並希望有人可以幫助我在這裏!

給@digitalLink我有正確的表達方式。
這是(<abcd\.*z>(.|\n)*?)(?=<\/node>)

這適用於像regexr和regexp101在線工具。 我注意到這兩個工具在reg表達式的末尾都使用了g修飾符(全局修飾符)。我知道/ g表達式標誌重新存放最後匹配的索引,允許迭代搜索。

這是可能的matlab中? 我是否必須在matlab中明確使用g-modifier? matlab中的等效表達式標誌是什麼

請問有人可以幫我一把。我是matlab新手,無法弄清楚這個!

回答

0

我覺得這個正則表達式可能就是你要找的東西。 讓我知道它是如何工作的。

"(<abcd\.*z>(.|\n)*?)(?=<\/node>)" 

確保包含多行標誌。

測試在這裏: http://regexr.com/3c0aj

+0

嘿!感謝您的表達。當我使用regexr.com或regex101.com等在線工具進行檢查時,它的功能就像是一種魅力。但是當我在matlab程序中使用它時,它不起作用。我注意到regexr.com和regexp101.com在你共享的reg表達式的末尾使用了一個g-modifier(全局修飾符)。我是否必須在matlab中明確使用g-modifier?如果可以,請告訴我我該怎麼做?再次感謝 –

+0

我知道/ g表達式標誌重新存放最後匹配的索引,允許迭代搜索。這在matlab中可能嗎?如果是的話matlab中的等效表達式標誌是什麼,它如何與你共享的表達式一起使用? –