我可以使用Regex在mathml匹配之前和之后拆分XML字符串

时间:2015-04-14 20:04:30

标签: c# .net regex mathml

我想问一下我可以使用哪个正则表达式来按<math xmlns='http://www.w3.org/1998/Math/MathML'>....</math>分割文本字符串

结果将是:

enter image description here

代码是:

        var text = @"{(test&<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><plus></plus><cn>1</cn><cn>2</cn></apply></math>)|(<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><root></root><degree><ci>m</ci></degree><ci>m</ci></apply></math>&nnm)&<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><power></power><cn>1</cn><cn>2</cn></apply></math>#<math xmlns='http://www.w3.org/1998/Math/MathML'><set><ci>l</ci></set></math>}";
        string findTagString = "(<math.*?>)|(.+?(?=<math/>))";
        Regex findTag = new Regex(findTagString);
        List<string> textList = findTag.Split(text).ToList();

我在Using Regex to split XML string before and after match找到了一个类似的问题,我想就Regex表达提出建议

谢谢

大利

3 个答案:

答案 0 :(得分:0)

经过一些测试后,我认为这将完成工作:

string findTagString = "(<math.*?></math>)|((.*){}()#&(.*))</math>";

答案 1 :(得分:0)

这是我的尝试,基于零长度前瞻和后视:

(?=<math[^>]*>)|(?<=</math>)

代码:

string findTagString = "(?=<math[^>]*>)|(?<=</math>)";
var text = @"{(test&<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><plus></plus><cn>1</cn><cn>2</cn></apply></math>)|(<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><root></root><degree><ci>m</ci></degree><ci>m</ci></apply></math>&nnm)&<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><power></power><cn>1</cn><cn>2</cn></apply></math>#<math xmlns='http://www.w3.org/1998/Math/MathML'><set><ci>l</ci></set></math>}";
Regex findTag = new Regex(findTagString);
string[] textList = findTag.Split(text);
Console.WriteLine(string.Join("\n", textList));

输出sample program

{(test&                                                                                                                                                             
<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><plus></plus><cn>1</cn><cn>2</cn></apply></math>                                                            
)|(                                                                                                                                                                 
<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><root></root><degree><ci>m</ci></degree><ci>m</ci></apply></math>                                           
&nnm)&                                                                                                                                                              
<math xmlns='http://www.w3.org/1998/Math/MathML'><apply><power></power><cn>1</cn><cn>2</cn></apply></math>                                                          
#                                                                                                                                                                   
<math xmlns='http://www.w3.org/1998/Math/MathML'><set><ci>l</ci></set></math>                                                                                       
}     

答案 2 :(得分:0)

我建议不要尝试在XML中使用正则表达式。 XML不是regular language,因此不适合正则表达式。无论如何.NET提供了解析XML的方便工具,我真的不明白这一点。

我的建议是你使用LINQ to XML而不是regexs。