using System;
using System.Collections;
using System.Text.RegularExpressions;
public class MyClass
{
public static void Main()
{
string msg = null;
string str = null;
str += "<table width=\"100%\" align=\"center\" border=\"0\">";
str += "<tr>";
str += "<td width=\"777\" valign=\"top\">";
str += "第1行.<msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>";
str += "第2行.<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>";
str += "第3行.<msii id = \"T.Item\" value = \"news:local\" style=\"classics:134\"/>";
str += "第4行.<msii id = \"S.List\" value = \"page:local\" style=\"classics:332\"></msii>";
str += "第5行.<msii id="Icon.Menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>";
str += "第6行.<msii id="Icon.Menu" value="news:02x" style="left:129">这是一条测试信息</msii>";
str += "</td>";
str += "</tr>";
str += "</table>";//以下取得html文本中存在多少个msii标签对
string regexString = @"(<msii[^>]*/>)|(<msii[^>]*>.*?</msii>)";
Regex matchesRegex = new Regex(regexString);
MatchCollection matchFound = matchesRegex.Matches(ReturnText);
if(matchFound.Count>0)
{
//以下正则表达式只是将每一个msii标签对中的数据分离出来如:id=……、value=……、style=……,但是如果将<msii></msii>标签对之间的(非空格)数据也取出来成为独立的数据应该怎么表达式?即是指<msii></msii>标签对之间可能是空格,也可能是文本或图片地址(如:<img src="../image/ccc.gif">将视为一个整体)。如果是空格则当作无空格处理。
//…………………………………………………………………………………………
//下面如何将取得的这些标签对中的数据分离出来?其实就是解决如何写这个正则表达式?
RegExPattern = @"(\S*?)\s*?=\s*?""(.*?)""";
for(int i=0;i<matchFound.Count;i++)
{
//Response.Write(matchFound[i].ToString().Trim());//显示html文本中的标签对。
Regex reg = new Regex(RegExPattern, RegexOptions.IgnoreCase);
MatchCollection ms = reg.Matches(matchFound[i].ToString().Trim());
if(ms.Count > 0)
{
foreach(Match m in ms)
{
Response.Write(m.Groups[0].Value);//得到分离后的数值
Response.Write(m.Groups[1].Value);//得到分离后的数值
Response.Write(m.Groups[2].Value);//得到分离后的数值
Response.Write(m.Groups[3].Value);//得到分离后的数值,可能为空。因为位于<msii>……</msii>之间。
}
}
}
//…………………………………………………………………………………………
}
}
}//在这里实现:
//1.将msii标签里的数据分离出来,分别表达成独立的数据。
//如将:<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>分离后得到三个部分:V.Menu;news:local;classics:166。
//2.若<msii ……>……</msii>标签中有数值(非空格数据)的,则将标签之间的也分离出来成为独立的数据。
//如将第五行<msii id="Icon.Menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>分离得到四个部分:Icon.Menu;news:001;left:129;<img src="../image/ccc.gif">
//而将第六行<msii id="Icon.Menu" value="news:02x" style="left:129">这是一条测试信息</msii>分离得到四个部分:Icon.Menu;news:001;left:129;这是一条测试信息
//<a href="news:02x">这是一条测试信息</a>//3.msii标签说明:
//(1)msii标签支持三种形式:<msii … />、<msii …></msii>和<msii ……>……</msii>
//(2)msii标签内的参数值的表现形式可能是:
// id = …、id = '…'、id="…"(=号两边可能有空格);
// value = "…"、value = '…'或value = …(=号两边可能有空格);
// style = "…"、style = '…'或style = …(=号两边可能有空格);
//……
Console.WriteLine(msg);//打印结果
}
}
using System.Collections;
using System.Text.RegularExpressions;
public class MyClass
{
public static void Main()
{
string msg = null;
string str = null;
str += "<table width=\"100%\" align=\"center\" border=\"0\">";
str += "<tr>";
str += "<td width=\"777\" valign=\"top\">";
str += "第1行.<msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>";
str += "第2行.<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>";
str += "第3行.<msii id = \"T.Item\" value = \"news:local\" style=\"classics:134\"/>";
str += "第4行.<msii id = \"S.List\" value = \"page:local\" style=\"classics:332\"></msii>";
str += "第5行.<msii id="Icon.Menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>";
str += "第6行.<msii id="Icon.Menu" value="news:02x" style="left:129">这是一条测试信息</msii>";
str += "</td>";
str += "</tr>";
str += "</table>";//以下取得html文本中存在多少个msii标签对
string regexString = @"(<msii[^>]*/>)|(<msii[^>]*>.*?</msii>)";
Regex matchesRegex = new Regex(regexString);
MatchCollection matchFound = matchesRegex.Matches(ReturnText);
if(matchFound.Count>0)
{
//以下正则表达式只是将每一个msii标签对中的数据分离出来如:id=……、value=……、style=……,但是如果将<msii></msii>标签对之间的(非空格)数据也取出来成为独立的数据应该怎么表达式?即是指<msii></msii>标签对之间可能是空格,也可能是文本或图片地址(如:<img src="../image/ccc.gif">将视为一个整体)。如果是空格则当作无空格处理。
//…………………………………………………………………………………………
//下面如何将取得的这些标签对中的数据分离出来?其实就是解决如何写这个正则表达式?
RegExPattern = @"(\S*?)\s*?=\s*?""(.*?)""";
for(int i=0;i<matchFound.Count;i++)
{
//Response.Write(matchFound[i].ToString().Trim());//显示html文本中的标签对。
Regex reg = new Regex(RegExPattern, RegexOptions.IgnoreCase);
MatchCollection ms = reg.Matches(matchFound[i].ToString().Trim());
if(ms.Count > 0)
{
foreach(Match m in ms)
{
Response.Write(m.Groups[0].Value);//得到分离后的数值
Response.Write(m.Groups[1].Value);//得到分离后的数值
Response.Write(m.Groups[2].Value);//得到分离后的数值
Response.Write(m.Groups[3].Value);//得到分离后的数值,可能为空。因为位于<msii>……</msii>之间。
}
}
}
//…………………………………………………………………………………………
}
}
}//在这里实现:
//1.将msii标签里的数据分离出来,分别表达成独立的数据。
//如将:<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>分离后得到三个部分:V.Menu;news:local;classics:166。
//2.若<msii ……>……</msii>标签中有数值(非空格数据)的,则将标签之间的也分离出来成为独立的数据。
//如将第五行<msii id="Icon.Menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>分离得到四个部分:Icon.Menu;news:001;left:129;<img src="../image/ccc.gif">
//而将第六行<msii id="Icon.Menu" value="news:02x" style="left:129">这是一条测试信息</msii>分离得到四个部分:Icon.Menu;news:001;left:129;这是一条测试信息
//<a href="news:02x">这是一条测试信息</a>//3.msii标签说明:
//(1)msii标签支持三种形式:<msii … />、<msii …></msii>和<msii ……>……</msii>
//(2)msii标签内的参数值的表现形式可能是:
// id = …、id = '…'、id="…"(=号两边可能有空格);
// value = "…"、value = '…'或value = …(=号两边可能有空格);
// style = "…"、style = '…'或style = …(=号两边可能有空格);
//……
Console.WriteLine(msg);//打印结果
}
}
using System.Collections;
using System.Text.RegularExpressions;
public class MyClass
{
public static void Main()
{
string msg = null;
string str = null;
str += "<table width=\"100%\" align=\"center\" border=\"0\">";
str += "<tr>";
str += "<td width=\"777\" valign=\"top\">";
str += "第1行.<msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>";
str += "第2行.<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>";
str += "第3行.<msii id = \"T.Item\" value = \"news:local\" style=\"classics:134\"/>";
str += "第4行.<msii id = \"S.List\" value = \"page:local\" style=\"classics:332\"></msii>";
str += "第5行.<msii id="Icon.Menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>";
str += "第6行.<msii id="Icon.Menu" value="news:02x" style="left:129">这是一条测试信息</msii>";
str += "</td>";
str += "</tr>";
str += "</table>";//以下取得html文本中存在多少个msii标签对
string regexString = @"(<msii[^>]*/>)|(<msii[^>]*>.*?</msii>)";
Regex matchesRegex = new Regex(regexString);
MatchCollection matchFound = matchesRegex.Matches(ReturnText);
if(matchFound.Count>0)
{
//以下正则表达式只是将每一个msii标签对中的数据分离出来如:id=……、value=……、style=……,但是如果将<msii></msii>标签对之间的(非空格)数据也取出来成为独立的数据应该怎么表达式?即是指<msii></msii>标签对之间可能是空格,也可能是文本或图片地址(如:<img src="../image/ccc.gif">将视为一个整体)。如果是空格则当作无空格处理。
//…………………………………………………………………………………………
//下面如何将取得的这些标签对中的数据分离出来?其实就是解决如何写这个正则表达式?
RegExPattern = @"(\S*?)\s*?=\s*?""(.*?)""";
for(int i=0;i<matchFound.Count;i++)
{
//Response.Write(matchFound[i].ToString().Trim());//显示html文本中的标签对。
Regex reg = new Regex(RegExPattern, RegexOptions.IgnoreCase);
MatchCollection ms = reg.Matches(matchFound[i].ToString().Trim());
if(ms.Count > 0)
{
foreach(Match m in ms)
{
Response.Write(m.Groups[0].Value);//得到分离后的数值
Response.Write(m.Groups[1].Value);//得到分离后的数值
Response.Write(m.Groups[2].Value);//得到分离后的数值
Response.Write(m.Groups[3].Value);//得到分离后的数值,可能为空。因为位于<msii>……</msii>之间。
}
}
}
//…………………………………………………………………………………………
}
}
}//在这里实现:
//1.将msii标签里的数据分离出来,分别表达成独立的数据。
//如将:<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>分离后得到三个部分:V.Menu;news:local;classics:166。
//2.若<msii ……>……</msii>标签中有数值(非空格数据)的,则将标签之间的也分离出来成为独立的数据。
//如将第五行<msii id="Icon.Menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>分离得到四个部分:Icon.Menu;news:001;left:129;<img src="../image/ccc.gif">
//而将第六行<msii id="Icon.Menu" value="news:02x" style="left:129">这是一条测试信息</msii>分离得到四个部分:Icon.Menu;news:001;left:129;这是一条测试信息//3.msii标签说明:
//(1)msii标签支持三种形式:<msii … />、<msii …></msii>和<msii ……>……</msii>
//(2)msii标签内的参数值的表现形式可能是:
// id = …、id = '…'、id="…"(=号两边可能有空格);
// value = "…"、value = '…'或value = …(=号两边可能有空格);
// style = "…"、style = '…'或style = …(=号两边可能有空格);
//……
Console.WriteLine(msg);//打印结果
}
}
using System.Text.RegularExpressions;
using System.Collections;public class MyClass
{
public static void Main()
{
string str = @"<table width=""100%"" align=""center"" border=""0"">
<tr>
<td width=""777"" valign=""top"">
第1行.<msii id = ""H.Menu"" value = ""page:local"" style=""classics:103""></msii>
第2行.<msii id = ""V.Menu"" value = ""news:local"" style=""classics:166""/>
第3行.<msii id = ""T.Item"" value = ""news:local"" style=""classics:134""/>
第4行.<msii id = ""S.List"" value = ""page:local"" style=""classics:332""></msii>
第5行.<msii id=""Icon.Menu"" value=""news:001"" style=""left:129""><img src=""../image/ccc.gif""></msii>
第6行.<msii id=""Icon.Menu"" value=""news:02x"" style=""left:129"">这是一条测试信息</msii>
</td>
</tr>
</table>";
string regexStr = "<msii\\s+id\\s*=\\s*\\\"(?<id>[^\\\"]+)\\\"\\s+value\\s*=\\s*\\\"(?<value>[^\\\"]+)\\\"\\s+style\\s*=\\s*\\\"(?<style>[^\\\"]+)\\\"((/>)|>((?<content>.*?)</msii>))";
MatchCollection mc = Regex.Matches(str, regexStr);
foreach(Match m in mc)
{
Console.WriteLine(m.Groups["id"].Value);
Console.WriteLine(m.Groups["value"].Value);
Console.WriteLine(m.Groups["style"].Value);
Console.WriteLine(m.Groups["content"].Value);
Console.WriteLine("\r\n");
}
Console.ReadLine();
}
}
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");
第1行.<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
第2行.<msii id = "V.Menu" value = "news:local" style="classics:166"/>
第3行.<msii id = "T.Item" value = "news:local" style = 'classics:134'/>
第4行.<msii id = "S.List" value = "page:local" style="classics:332"></msii>
第5行.<msii id="Icon.Menu" value="news:001"" style="left:129"><img src="../image/ccc.gif"></msii>
第6行.<msii id="Icon.Menu" value='news:02x' style="left:129">这是一条测试信息</msii>
正则
<\s*msii.*?id\s*=\s*(["'])(?<ID值>.*?)\1.*?value\s*=\s*(["'])(?<value值>.*?)\2.*?style\s*=\s*(["'])(?<style值>.*?)\3.*?(?:/>|(?:>(?<一对msii标签中间的值>.*?)<\s*/msii\s*>))
结果:
捕获 1 :
<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
==============================华丽的分隔线===============================
捕获 2 :
<msii id = "V.Menu" value = "news:local" style="classics:166"/>
==============================华丽的分隔线===============================
捕获 3 :
<msii id = "T.Item" value = "news:local" style = 'classics:134'/>
==============================华丽的分隔线===============================
捕获 4 :
<msii id = "S.List" value = "page:local" style="classics:332"></msii>
==============================华丽的分隔线===============================
捕获 5 :
<msii id="Icon.Menu" value="news:001"" style="left:129"><img src="../image/ccc.gif"></msii>
==============================华丽的分隔线===============================
捕获 6 :
<msii id="Icon.Menu" value='news:02x' style="left:129">这是一条测试信息</msii>
==============================华丽的分隔线===============================
分组结果:
捕获 1 :
组 1 : "
组 2 : "
组 3 : "
组 4 : H.Menu
组 5 : page:local
组 6 : classics:103
组 7 :
==============================华丽的分隔线===============================
捕获 2 :
组 1 : "
组 2 : "
组 3 : "
组 4 : V.Menu
组 5 : news:local
组 6 : classics:166
组 7 :
==============================华丽的分隔线===============================
捕获 3 :
组 1 : "
组 2 : "
组 3 : '
组 4 : T.Item
组 5 : news:local
组 6 : classics:134
组 7 :
==============================华丽的分隔线===============================
捕获 4 :
组 1 : "
组 2 : "
组 3 : "
组 4 : S.List
组 5 : page:local
组 6 : classics:332
组 7 :
==============================华丽的分隔线===============================
捕获 5 :
组 1 : "
组 2 : "
组 3 : "
组 4 : Icon.Menu
组 5 : news:001
组 6 : left:129
组 7 : <img src="../image/ccc.gif">
==============================华丽的分隔线===============================
捕获 6 :
组 1 : "
组 2 : '
组 3 : "
组 4 : Icon.Menu
组 5 : news:02x
组 6 : left:129
组 7 : 这是一条测试信息
==============================华丽的分隔线===============================
组4到组7分别是你想到的值
用
MatchCollection mc = Regex.Matches(str, regexStr);
foreach(Match m in mc)
{
Console.WriteLine(m.Groups["id"].Value);
Console.WriteLine(m.Groups["value"].Value);
Console.WriteLine(m.Groups["style"].Value);
Console.WriteLine(m.Groups["content"].Value);
Console.WriteLine("\r\n");
}
取出便可
http://www.17897.com/regextext.aspx
用下面这个
string regexStr = "<msii\\s+id\\s*=\\s*(?<s1>[\"']?)(?<id>.+?)\\k<s1>\\s+value\\s*=\\s*(?<s2>[\"']?)(?<value>.+?)\\k<s2>\\s+style\\s*=\\s*(?<s3>[\"']?)(?<style>.+?)\\k<s3>\\s*((/>)|>((?<content>.*?)</msii>))";
原来是:<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
现在是:[msii id = "H.Menu" value = "page:local" style="classics:103"][/msii]RegExPattern = @"\[msii\\s+id\\s*=\\s*(?<s1>[""']?)(?<MsiiID>.+?)\\k<s1>\\s+value\\s*=\\s*(?<s2>[""']?)(?<MsiiValue>.+?)\\k<s2>\\s+style\\s*=\\s*(?<s3>[""']?)(?<MsiiStyle>.+?)\\k<s3>\\s*((/\])|\]((?<MsiiContent>.*?)\[/msii\]))";
12234234第1行.[msii id = "H.Menu" value = "page:local" style="classics:103"][/msii]
第2行.[msii id = "V.Menu" value = "news:local" style="classics:166"/]
第3行.[msii id = "T.Item" value = "news:local" style = 'classics:134'/]
35345
正则:
\[\s*msii.*?id\s*=\s*(["'])(?<ID值>.*?)\1.*?value\s*=\s*(["'])(?<value值>.*?)\2.*?style\s*=\s*(["'])(?<style值>.*?)\3.*?(?:/\]|(?:\](?<一对msii标签中间的值>.*?)\[\s*/msii\s*\]))
结果:
捕获 1 :
[msii id = "H.Menu" value = "page:local" style="classics:103"][/msii]==============================华丽的分隔线===============================
捕获 2 :
[msii id = "V.Menu" value = "news:local" style="classics:166"/]==============================华丽的分隔线===============================
捕获 3 :
[msii id = "T.Item" value = "news:local" style = 'classics:134'/]==============================华丽的分隔线===============================
分组结果:
捕获 1 :
组 1 : "
组 2 : "
组 3 : "
组 4 : H.Menu
组 5 : page:local
组 6 : classics:103
组 7 :
==============================华丽的分隔线===============================
捕获 2 :
组 1 : "
组 2 : "
组 3 : "
组 4 : V.Menu
组 5 : news:local
组 6 : classics:166
组 7 :
==============================华丽的分隔线===============================
捕获 3 :
组 1 : "
组 2 : "
组 3 : '
组 4 : T.Item
组 5 : news:local
组 6 : classics:134
组 7 :
==============================华丽的分隔线===============================
你发给我的短消息。===============
原贴:
http://community.csdn.net/Expert/topic/5120/5120606.xml?temp=.4792597因为特殊原因,要把<和>变成[和],我修改了“敌威伯”的正则表达式,怎么就不行了?
原来是:<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
现在是:[msii id = "H.Menu" value = "page:local" style="classics:103"][/msii]RegExPattern = @"\[msii\\s+id\\s*=\\s*(?<s1>[""']?)(?<MsiiID>.+?)\\k<s1>\\s+value\\s*=\\s*(?<s2>[""']?)(?<MsiiValue>.+?)\\k<s2>\\s+style\\s*=\\s*(?<s3>[""']?)(?<MsiiStyle>.+?)\\k<s3>\\s*((/\])|\]((?<MsiiContent>.*?)\[/msii\]))";================
原因是因为你在初始化字符串变量时用了@,去掉@就行了。
RegExPattern="\[msii\\s+id\\s*=\\s*(?<s1>[""']?)(?<MsiiID>.+?)\\k<s1>\\s+value\\s*=\\s*(?<s2>[""']?)(?<MsiiValue>.+?)\\k<s2>\\s+style\\s*=\\s*(?<s3>[""']?)(?<MsiiStyle>.+?)\\k<s3>\\s*((/\])|\]((?<MsiiContent>.*?)\[/msii\]))";如果用@则所有的\\s替换为\s,\\k替换为\k
RegExPattern=@"\[msii\s+id\s*=\s*(?<s1>[""']?)(?<MsiiID>.+?)\k<s1>\s+value\s*=\s*(?<s2>[""']?)(?<MsiiValue>.+?)\k<s2>\s+style\s*=\s*(?<s3>[""']?)(?<MsiiStyle>.+?)\k<s3>\s*((/\])|\]((?<MsiiContent>.*?)\[/msii\]))";@的用法请参考
http://www.chenjiliang.com/Article/View.aspx?ArticleID=207&TypeID=34
唉来晚了
group1 id
group2 id.value
group3 value
group4 value.id
group5 style
group6 style.value
group7 innerhtml
match FullTag