如何匹配xml字符串末尾的斜杠?

时间:2011-09-02 20:45:20

标签: .net xml regex

问题:
我想使用正则表达式匹配某个xml子字符串(参见下面的例如A)。问题是我无法匹配xml字符串末尾的斜杠,因为它在Regex中是一个有意义的char。我甚至试图通过在我的模式中的斜杠之前插入反斜杠来逃避斜线(参见下面的代码),但仍然无法使其工作......

问题:
我是如何使.NET Regex匹配xml字符串末尾的斜杠???需要你们中的一些代码忍者来帮助我。先谢谢你的帮助,我的朋友。

输入:

<SummarySection id="_470">
   <Title>Statistics</Title> 
   <Para id="_331"> Note: Estimated new cases in the United States in 2010:<Reference refidx="1"/> </Para>  
</SummarySection>

守则

// ex A: Pattern need to match (<Reference refidx="1"/>)

string xnodeptn = @"(<Reference refidx=""[a-zA-Z0-9]""/>)";  
Regex refregex = new Regex(xnodeptn, RegexOptions.Compiled | RegexOptions.IgnoreCase);
MatchCollection mymatches = refregex.Matches(xe.ToString());
foreach (Match mch in mymatches)
{
...
}

string xnodeptn = @"(<Reference refidx=""[a-zA-Z0-9]""\/>)";  

4 个答案:

答案 0 :(得分:1)

我相信斜线“/”is not a reserved character in regex。所以我认为模式一定存在不同的问题。

答案 1 :(得分:1)

@"(<Reference refidx=""[a-zA-Z0-9]""/>)"工作得很好!!! 试试这个:

string text = "<SummarySection id=\"_470\"> <Title>Statistics</Title> <Para id=\"_331\"> Note: Estimated new cases in the United States in 2010: <Reference refidx=\"1\"/> </Para> <ItemizedList id=\"_332\" Style=\"bullet\"> </SummarySection>";         
string xnodeptn = @"(<Reference refidx=""[a-zA-Z0-9]""/>)";  
Regex refregex = new Regex(xnodeptn, RegexOptions.Compiled | RegexOptions.IgnoreCase);
MatchCollection mymatches = refregex.Matches(text);
foreach (Match mch in mymatches)
{
    MessageBox.Show(mch.ToString());
}

它返回示例文本(<Reference refidx=\"1\"/>)中的匹配项。尝试寻找其他问题或发布更多代码。

enter image description here

答案 2 :(得分:1)

首先,正如Reddog所说,“/”不是正则表达式中的特殊字符。如果是,你可以用反斜杠来逃避,但你不需要。

其次,为什么使用正则表达式来处理XML?您真的想以<Reference refidx="1"/>的方式处理<Reference refidx="1"></Reference>吗?如果你这样做,那么就会有一些可疑的东西 - 你没有使用XML,因为它被设计成使用:这两个结构应该是等价的。

答案 3 :(得分:0)

其中一个答案是正确的,这是导致模式不起作用的其他原因,在我的XML中,在关闭标记之前没有空格,如跟随<Reference refidx="1"/>但是我的正则表达式模式期望在之前匹配空格关闭标记如下:<Reference refidx="1" />不确定为什么会这样,但我的问题已经解决了。