Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 正则表达式-如何匹配xml值_C#_.net_Regex - Fatal编程技术网

C# 正则表达式-如何匹配xml值

C# 正则表达式-如何匹配xml值,c#,.net,regex,C#,.net,Regex,我想使用正则表达式获取和标记之间的航空公司代码 我只需要标记中包含的标记的值。外面有更多的标签,我不想从他们那里得到航空公司的价值 我试过使用下面的正则表达式,但它给出了我所有的航空公司代码,不管提到的职位考虑。请帮忙 var regex = new Regex(@"<AirlineCode>(.*?)</AirlineCode>", RegexOptions.IgnoreCase); Match m = regex.Match("<

我想使用正则表达式获取
标记之间的航空公司代码

我只需要
标记中包含的
标记的值。外面有更多的
标签,我不想从他们那里得到航空公司的价值

我试过使用下面的正则表达式,但它给出了我所有的航空公司代码,不管提到的职位考虑。请帮忙

        var regex = new Regex(@"<AirlineCode>(.*?)</AirlineCode>", RegexOptions.IgnoreCase);

        Match m = regex.Match("<PNRViewRS><AirGroup><Flight CnxxIndicator=\"N\"><Arrival></Arrival><Carrier><AirlineCode>DL</AirlineCode></Carrier></Flight><Flight CnxxIndicator=\"N\"><Arrival></Arrival><Carrier><AirlineCode>AA</AirlineCode></Carrier></Flight></AirGroup></PNRViewRS>");
        int matchCount = 0;
        while (m.Success)
        {
            Console.WriteLine("Match" + (++matchCount));
            for (int i = 1; i <= 2; i++)
            {
                Group g = m.Groups[i];
                //do stuff...
            }
            m = m.NextMatch();
        }
var regex=new regex(@“(.*)”,RegexOptions.IgnoreCase);
匹配m=正则表达式匹配(“DLAA”);
int matchCount=0;
while(m.Success)
{
Console.WriteLine(“匹配”+(++matchCount));

对于(int i=1;i一般来说,尝试用正则表达式解析XML是个坏主意。原因是正则表达式的表达能力不足,即使有反向引用之类的。注释中链接的问题值得一读,以理解为什么这通常是个坏主意

也就是说,如果您确实知道文件的格式,并且愿意进行一些非正则表达式解析,那么您就可以成功

在您的情况下,您基本上:

<Flight>
    <AirlineCode>
    </AirlineCode>
<Flight>
<AirlineCode>
</AirlineCode>
<Flight>
    <AirlineCode>
    </AirlineCode>
<Flight>

您需要出现在
标记中的所有
标记

解决此问题的方法是使用一个正则表达式提取
标记及其内容,然后使用另一个正则表达式从提取的
标记中提取
标记。不要尝试在单个正则表达式中执行此操作。您不会成功


如果您的数据真的那么简单,那么这就行了。我不会说我推荐这种方法。有太多的事情可能会出错。数据格式有一种令人不安的变化趋势,如果格式稍有变化,脆弱的正则表达式解决方案很可能会崩溃。XML解析器解决方案会更加健壮。

为什么不使用
XDocument
?有任何原因不能使用XML解析器吗?LINQ到XML(
XDocument
)例如,这是一个非常奇怪的限制,你能进一步解释吗?为什么一定是Regex?@AlexeiLevenkov我认为这是一个有效的问题-这是很多人一直试图做的事情,在某个地方有一个解释为什么这是一个坏主意的答案将是有用的。不幸的是,对于已经链接的答案没有一个是有用的d潜在的重复(特别是第一个)实际上解释了为什么不能这样做。有很多答案说“你不能这样做”没有理由,很多人尝试使用正则表达式,聪明的人已经在其中选择了一个漏洞,但没有什么能从根本上解释问题所在。你知道,如果足够多的专家说,“不要这样做”,那么这就是答案。