不用正则表达式.
====================
string s1="[**abc**]def[**abc2**]jjjjnjndfg";
s1=s1.Replace("**","");
string[] s2=s1.Split('[');
string[] s3;
for(int i=0;i<s2.Length;i++)
{
if(s2[i]!="")
{
s3=s2[i].Split(']');
Console.Out.WriteLine(s3[0]+":"+s3[1]);
}
}
====================
string s1="[**abc**]def[**abc2**]jjjjnjndfg";
s1=s1.Replace("**","");
string[] s2=s1.Split('[');
string[] s3;
for(int i=0;i<s2.Length;i++)
{
if(s2[i]!="")
{
s3=s2[i].Split(']');
Console.Out.WriteLine(s3[0]+":"+s3[1]);
}
}
[**abc**]def
[**abc2**]jjjj
njndfg
[****]
[**abc**]kkkk
[**abc2**]asdjfvs
[**abc3**]fhshg
[****]
using System.Text.RegularExpressions;namespace Samples {
public class RegExMatcherMulti {
public static void Main(String[] args){
Regex myRegex = new Regex("\\[\\*\\*(?<g1>.*)\\*\\*\\](?<g2>.*\\r\\n)");
String s = @"[**abc**]def
[**abc2**]jjjj
njndfg
[****]
[**abc**]kkkk
[**abc2**]asdjfvs
[**abc3**]fhshg
[****]"; MatchCollection mc = myRegex.Matches(s); if ( mc.Count > 0 ) {
System.Console.WriteLine("Results:");
foreach (Match m in mc) {
System.Console.WriteLine(m.Groups["g1"].Value + " : " + m.Groups["g2"].Value);
}
} System.Console.WriteLine();
System.Console.WriteLine("Press Enter to Continue...");
System.Console.ReadLine();
}
}
}
举个例子:字符串中有
“[**abc2**]jjjj
njndfg”,里面也包含了一个回车换行,结果匹配出来后"jjjj"后面的部分就没有了,这不合理。
最好是将内容部分的结束位置和"[**"匹配,但这样标题的开始部分又没有了,真麻烦。实在不行就只好要求标题必须有明确的结束标志。
<编号>232</编号>
<名称>asdf</名称>
<**>
<编号>234</编号>
<名称>gsfh</名称>
<说明>hhhjsfgadsf</说明>
<**>
又该怎么转成xml格式呢?
我依旧不能弄成功。能匹配出所有标题和内容,但无法区分出不同的主题,就是用<**>分隔的。
string t="[**abc**]def[**abc2**]jjjjn [****][**abc**]kkkk[**abc2**]asdjfvs[**abc3**]fhshg[****]";
Regex reg=new Regex(@"\*\*([^\[]*?)\[");
foreach(Match m in reg.Matches(t))
{
a=m.Groups[1]+"\n";
string[] s2=a.Split('**]');
Console.Out.WriteLine(s2[0]+":"+s2[1]); }
using System.Text.RegularExpressions;namespace Samples {
public class RegExMatcherMulti {
public static void Main(String[] args){
Regex myRegex = new Regex("(\\[\\*\\*|\\*\\*\\])(?<g1>[^(\\[\\*\\*|\\*\\*\\])]*)");
String s = @"[**abc**]def
[**abc2**]jjjj
njndfg
[****]
[**abc**]kkkk
[**abc2**]asdjfvs
[**abc3**]fhshg
[****]"; MatchCollection mc = myRegex.Matches(s); if ( mc.Count > 0 ) {
System.Console.WriteLine("Results:");
foreach (Match m in mc) {
string x = m.Groups["g1"].Value;
System.Console.Write(x);
if (x.IndexOf("\r\n") < 0 && x.Trim() != "")
{
System.Console.Write(" : ");
}
}
} System.Console.WriteLine();
System.Console.WriteLine("Press Enter to Continue...");
System.Console.ReadLine();
}
}
}