matlab中的多行正则表达式

Multiline regexp in 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/>

并且此模式重复多次。

我的要求是获取 </node> 上方的第一个 <abcd.....z> 以及它们之间的数据(即所有 <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>

再次抱歉 post 并希望有人能帮助我!!

感谢@digitalLink,我的表达方式正确。
(<abcd\.*z>(.|\n)*?)(?=<\/node>)

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

这在 matlab 中可行吗? 我必须在 matlab 中明确使用 g-modifier 吗? matlab

中的等价表达式标志是什么

有人可以帮我解决这个问题吗?我是 matlab 的新手,无法弄清楚这个!!

我想这个 Regex 表达式可能就是您要找的。 让我知道它是如何工作的。

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

确保包含多行标记。

在这里测试: http://regexr.com/3c0aj