matlab中的多行正则表达式

时间:2015-10-15 16:33:54

标签: regex matlab matlab-deployment matlab-compiler

嘿伙计我是使用正则表达式的新手。如果我的一些问题非常基础,请耐心等待。我需要为一些数据过滤大文件。 数据文件的一部分如下所示

<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/>&#39; s。我只需要最后一个即。输出必须是

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

再次为长篇文章感到抱歉,希望有人能帮帮我!!

向@digitalLink致敬我有正确的表达方式 它是(<abcd\.*z>(.|\n)*?)(?=<\/node>)

这适用于regexr和regexp101等在线工具。 我注意到这两个工具在reg表达式的末尾都使用了g-modifier(全局修饰符)。我知道/ g表达式标志重新定义了最后一个匹配的索引,允许迭代搜索。

这可以在matlab中使用吗? 我是否必须在matlab中明确使用g-modifier? matlab中的等效表达式标志是什么

有人可以帮帮我吗。我是matlab的新手,无法弄明白!!

1 个答案:

答案 0 :(得分:0)

我认为这个正则表达式可能是您正在寻找的。 让我知道它是如何工作的。

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

确保包含多行标记。

在此测试: http://regexr.com/3c0aj