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
大家好,我是使用正则表达式的新手。因此,如果我的一些问题非常基本,请耐心等待。我需要过滤一些数据的大文件。 数据文件的一部分如下所示
<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