嘿伙计我是使用正则表达式的新手。如果我的一些问题非常基础,请耐心等待。我需要为一些数据过滤大文件。 数据文件的一部分如下所示
<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的新手,无法弄明白!!
答案 0 :(得分:0)
我认为这个正则表达式可能是您正在寻找的。 让我知道它是如何工作的。
"(<abcd\.*z>(.|\n)*?)(?=<\/node>)"
确保包含多行标记。
在此测试: http://regexr.com/3c0aj