我想问一下我可以使用哪个正则表达式来按<math xmlns='http://www.w3.org/1998/Math/MathML'>....</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>}";
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表达提出建议
谢谢
大利
答案 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));
{(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。