这是一个纯粹的学术练习,与正则表达式和我对组合多个模式的理解有关。我有以下示例字符串
<xContext id="ABC">
<xData id="DEF">
<xData id="GHI">
<ID>JKL</ID>
<str>MNO</str>
<str>PQR</str>
<str>
<order id="STU">
<str>VWX</str>
</order>
<order id="YZA">
<str>BCD</str>
</order>
</str>
</xContext>
使用 C# Regex 我试图提取 3 个大写字母的组。
目前,如果我使用模式
>.+?</
我得到Found 5 matches:
>JKL</
>MNO</
>PQR</
>VWX</
>BCD</
如果我然后使用
id=".+?">
我得到Found 5 matches:
id="ABC">
id="DEF">
id="GHI">
id="STU">
id="YZA">
现在我试图通过对两边的每个术语使用逻辑或
|
来组合它们 id="|>.+?">|</
然而,这并没有给我两种模式的组合结果
我的问题是:
?<=
和 ?=<
但只是想检查一下。 谢谢
最佳答案
您的正则表达式不知道从哪里开始或停止由 |
分隔的替代选项。所以你需要把它们放在子模式中:
(id="|>).+?(">|</)
然而,regex is not the right tool to parse XML.
那些圆括号还添加了捕获子模式。这个可以自己退。所以这:
(id="|>)(.+?)(">|</)
将返回索引 0 处的整个匹配项、索引 1 处的前分隔符、索引 2 处所需的实际匹配项以及索引 3 处的最后一个分隔符。在大多数正则表达式引擎中,您可以这样做:
(?:id="|>)(.+?)(?:">|</)
以避免捕获分隔符。现在索引 0 将包含整个匹配项,而索引 1 仅包含 3 个字母。不幸的是,我无法告诉您如何在 C# 中检索它们。
关于c# - 正则表达式逻辑或,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12697442/