从text和html标记中将字符串拆分为数组

时间:2015-03-19 07:42:33

标签: c# regex

我有一个像

这样的字符串
string html = "truongpm<b><i>bold italic</i></b><b>bold</b><i>italic</i>";

我如何得到像

这样的数组
a[0] = "truongpm", a[1]= "<b><i>bold</i></b>", a[2]="<b>bold</b>", a[3]="<i>italic</i>"

来自此字符串。现在我使用这段代码

string tagRegex = @"<\s*([^ >]+)[^>]*>.*?<\s*/\s*\1\s*>";
MatchCollection matchesImgSrc = Regex.Matches(html, tagRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        foreach (Match m in matchesImgSrc)

但它只是

a[0]= "<b><i>bold</i></b>", a[1]="<b>bold</b>", a[2]="<i>italic</i>"

没有“truongpm” 请帮我! 感谢

2 个答案:

答案 0 :(得分:2)

以下是您可以使用的代码:

var l = new List<string>();
var html = "truongpm<b><i>bold italic</i></b><b>bold</b><i>italic</i>";
var tagRegex = @"[^<>]+|<\s*([^ >]+)[^>]*>.*?<\s*/\s*\1\s*>";
var matchesImgSrc = Regex.Matches(html, tagRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in matchesImgSrc)
    l.Add(m.Value);

答案 1 :(得分:1)

您的RegExp仅匹配标记内的字符串。如果您想要捕获没有任何标记的字符串,则必须添加正则表达式的替代方法。这可以通过添加([^<>]+)来完成,以便您的表达式看起来像([^<>]+)|{your existing expression}。 在像Regex Pal这样的网站上,您可以在创建正则表达式时找到帮助。