我想使用正则表达式来获取<AirlineCode>
和</AirlineCode>
代码之间的航空公司代码。
我只想要<AirlineCode>
标记中包含<Flight>
标记的值。外面有更多<AirlineCode>
个标签,我不想要它们的航空公司价值。
我尝试了下面的正则表达式,但无论提到的位置考虑因素,它都给了我所有的航空公司代码。请帮忙。
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();
}
答案 0 :(得分:2)
通常,尝试使用正则表达式解析XML是个坏主意。原因是正则表达式的表达力不够,即使使用反向引用也是如此。评论中链接的问题值得一读,以了解为什么这通常是一个坏主意。
也就是说,如果您确定知道文件的格式,并且您愿意进行一些非正则表达式解析,那么您可以获得成功。
在你的情况下,你基本上有:
<Flight>
<AirlineCode>
</AirlineCode>
<Flight>
<AirlineCode>
</AirlineCode>
<Flight>
<AirlineCode>
</AirlineCode>
<Flight>
您希望<AirlineCode>
代码中出现的所有<Flight>
代码。
解决此问题的方法是使用一个正则表达式提取<Flight>
标记及其内容,然后使用另一个正则表达式从提取的<AirlineCode>
标记中提取<Flight>
标记。不要尝试在单个正则表达式中执行此操作。你不会成功。
如果您的数据真的那么简单,那么这将有效。我不会说我推荐这种方法。有太多事情可能出错。数据格式具有令人沮丧的变化趋势,如果格式变化甚至一点点,那么脆弱的正则表达式解决方案可能会破裂。 XML解析器解决方案将更加健壮。