2015-03-19 78 views
1

阵列我有一个像分割字符串从文本和HTML标记

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” 请帮帮我! 感谢

+0

在当前模式之前放置'[^ <>] + |'。 – Jerry 2015-03-19 07:48:03

回答

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

它像一个魅力!谢谢。 – JCO9 2017-01-17 16:38:35

+0

很高兴为你效劳,请考虑接受答案。 – 2017-01-17 17:13:20

1

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