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 += " <msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>";
str += " <msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>";
str += " <msii id = \"T.Item\" value = \"news:local\" style=\"classics:134\"/>";
str += " <msii id = \"S.List\" value = \"page:local\" style=\"classics:332\"></msii>";
str += " </td>";
str += " </tr>";
str += "</table>";
string regexString=@"(\S*?)\s*?=\s*?""(.*?)""";
//在这里实现:
//1.将msii标签里的数据分离出来,分别表达成独立的数据。
//如将:<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>分离后得到:V.Menu;news:local;classics:166。
//2.将msii标签替换成相应标签里的数值。
//如将:<msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>替换成:H.Menu - page:local - classics:103
//3.msii标签说明:
//(1)msii标签支持两种形式:<msii …></msii>和<msii … />
//(2)msii标签内的参数值可能是:value = "…"、value = '…'或value = …;
//……
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 += " <msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>";
str += " <msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>";
str += " <msii id = \"T.Item\" value = \"news:local\" style=\"classics:134\"/>";
str += " <msii id = \"S.List\" value = \"page:local\" style=\"classics:332\"></msii>";
str += " </td>";
str += " </tr>";
str += "</table>";
string regexString=@"(\S*?)\s*?=\s*?""(.*?)""";
//在这里实现:
//1.将msii标签里的数据分离出来,分别表达成独立的数据。
//如将:<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>分离后得到:V.Menu;news:local;classics:166。
//2.将msii标签替换成相应标签里的数值。
//如将:<msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>替换成:H.Menu - page:local - classics:103
//3.msii标签说明:
//(1)msii标签支持两种形式:<msii …></msii>和<msii … />
//(2)msii标签内的参数值可能是:value = "…"、value = '…'或value = …;
//……
Console.WriteLine(msg);//打印结果
}
}
为什么一定要正则?
先找出msii节点
再取值
也可以一次完成
<msii id *= *(['|"]?)([a-z\d\:\.]+)\1 value *= *(['|"]?)([a-z\d\:\.]+)\3 style *= *(['|"]?)([a-z\d\:\.]+)\5(/>|></msii>)
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;public class MyClass
{
public static void Main()
{
string str = null;
str += "<table width=\"100%\" align=\"center\" border=\"0\">";
str += "<tr>";
str += "<td width=\"777\" valign=\"top\">";
str += "<msii id = \"H.Menu\" value = \"page:local\" style=\"classics:103\"></msii>";
str += "<msii id = \"V.Menu\" value = \"news:local\" style=\"classics:166\"/>";
str += "<msii id = \"T.Item\" value = \"news:local\" style=\"classics:134\"/>";
str += "<msii id = \"S.List\" value = \"page:local\" style=\"classics:332\"></msii>";
str += "</td>";
str += "</tr>";
str += "</table>";
Display1(str);
Display2(str);Console.Read();
}
static void Display2(string str){
Regex reg=new Regex("<msii +id *= *(['|\"]?)([a-z\\d\\:\\.]+)\\1 +value *= *(['|\"]?)([a-z\\d\\:\\.]+)\\3 +style *= *(['|\"]?)([a-z\\d\\:\\.]+)\\5(/>|></msii>)",RegexOptions.IgnoreCase);
foreach(Match match in reg.Matches(str)){
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine("id={0}",match.Groups[2].Value);
Console.WriteLine("value={0}",match.Groups[4].Value);
Console.WriteLine("style={0}",match.Groups[6].Value);
}
}
static void Display1(string str){
Regex reg=new Regex("<msii(( *\\w+) *= *(['|\"]?)([a-z\\d\\:\\.]+)\\3)+(/>|></msii>)",RegexOptions.IgnoreCase);
foreach(Match match in reg.Matches(str)){
Console.WriteLine(match.Groups[0].Value);
Regex reg2=new Regex("( *\\w+) *= *(['|\"]?)([a-z\\d\\:\\.]+)\\2",RegexOptions.IgnoreCase);
foreach(Match mc in reg2.Matches(match.Groups[0].Value)){
Console.WriteLine("{0}={1}",mc.Groups[1].Value,mc.Groups[3].Value);
}
}
}
}
<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
<msii id = "V.Menu" value = "news:local" style="classics:166"/>
正则:<msii id\s*=\s*(["'])(?<id>.*?)\1.*?value\s*=\s*(["'])(?<value>.*?)\2.*?.*?style\s*=\s*(["'])(?<style>.*?)\3.*?(/>|</msii>)
模式:IgnoreCase, Singleline
捕获数:2
捕获 1 :
<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
==============================华丽的分隔线===============================
捕获 2 :
<msii id = "V.Menu" value = "news:local" style="classics:166"/>
==============================华丽的分隔线===============================
捕获 1 :
组 1 : "
组 2 : "
组 3 : "
组 4 : </msii>
组 5 : H.Menu
组 6 : page:local
组 7 : classics:103
==============================华丽的分隔线===============================
捕获 2 :
组 1 : "
组 2 : "
组 3 : "
组 4 : />
组 5 : V.Menu
组 6 : news:local
组 7 : classics:166
==============================华丽的分隔线===============================
<msii id = "H.Menu" value = "page:local" style="classics:103"></msii>
<msii id = "V.Menu" value = "news:local" style="classics:166"/>
正则替换旧字符串:
<msii id\s*=\s*(["'])(?<id>.*?)\1.*?value\s*=\s*(["'])(?<value>.*?)\2.*?.*?style\s*=\s*(["'])(?<style>.*?)\3.*?(/>|</msii>)
正则替换新字符串:
$5-$6-$7
结果:
H.Menu-page:local-classics:103
V.Menu-news:local-classics:166
下载地址:http://www.kinghack.com/zzzzzzzzzzz/homepage/ch2sh4/wordbat.htm#有问题可直接联系我:[email protected]
新字符串 $1,$2,$3
<msii id="icon.menu" value="news:001" style="left:129"><img src="../image/ccc.gif"></msii>
或:
<msii id="icon.menu" value="news:001" style="left:129">这是一条测试信息</msii>都将被替换成:
<a href="news:001"><img src="../image/ccc.gif"></a>
或:
<a href="news:001">这是一条测试信息</a>紧急求助一下各位先生兄弟。
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++)
{
ReturnTextSub = matchFound[i].ToString().Trim();
}
}
}
}//在这里实现:
//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);//打印结果
}
}