Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则逻辑或_C#_Regex - Fatal编程技术网

C# 正则逻辑或

C# 正则逻辑或,c#,regex,C#,Regex,这是一个纯学术性的练习,涉及正则表达式和我对分组多种模式的理解。我有以下示例字符串 <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

这是一个纯学术性的练习,涉及正则表达式和我对分组多种模式的理解。我有以下示例字符串

<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>

现在,我试图通过对两边的每个术语使用逻辑或
来组合它们
id=“|>.+?”>您的正则表达式不知道从何处开始或停止由
分隔的alternativ选项。因此,您需要将它们放在子模式中:

(id="|>).+?(">|</)

(id=“|>).+?(“>| | | |您需要将备选方案分组在一起

(?:id="|>).+?(?:">|</)

(?:id=“|>).+?(?:”>||我建议您使用正则表达式模式
(?:(?|捕获组FTW

@">(?<content>.+?)<|id=""(?<content>.+?)"""

@“>(?。+?)我不太明白你想要什么,但是如果你只想要三个大写字母的组
\b([A-Z]{3})\b
你确定c#regex中允许使用可变长度的查找吗?我认为查找效率较低,因为字符串必须遍历两次。因此,我认为在这种情况下这有点过火。当然,这是一种更通用的解决方案,因此相当优雅;).@m.buettner-性能方面可能没问题,因为它在不创建反向引用时节省了一些时间(就像您的代码那样)。哈哈,这很公平。在做出此类声明之前,可能应该有人对其进行分析。^^。我只是想提醒大家,lookbehind通常会产生一些开销@Ωmega,是的,c#是我所知道的唯一一种不受外观限制的语言。谢谢-这也给出了正确的答案!我通常在这里测试c#
(id="|>)(.+?)(">|</)
(?:id="|>)(.+?)(?:">|</)
(?:id="|>).+?(?:">|</)
(?<=id="|>).+?(?=">|</)
@">(?<content>.+?)<|id=""(?<content>.+?)"""