我有一批数据,其格式为:
^^
~~狮子纪念碑~~
**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
@@卡贝尔桥狮子纪念碑@@
^^
^^
~~AAAA~~
**BBBB**
@@CCCC@@
^^有没有什么办法能把上面的字符替换成<div>
<span class="Item1">狮子纪念碑</span>
<span class="Item2">狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。</span>
<span class="Item3">卡贝尔桥狮子纪念碑</span>
</div>
<div>
<span class="Item1">AAAA</span>
<span class="Item2">BBBB</span>
<span class="Item3">CCCC</span>
</div>谢谢
^^
~~狮子纪念碑~~
**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
@@卡贝尔桥狮子纪念碑@@
^^
^^
~~AAAA~~
**BBBB**
@@CCCC@@
^^有没有什么办法能把上面的字符替换成<div>
<span class="Item1">狮子纪念碑</span>
<span class="Item2">狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。</span>
<span class="Item3">卡贝尔桥狮子纪念碑</span>
</div>
<div>
<span class="Item1">AAAA</span>
<span class="Item2">BBBB</span>
<span class="Item3">CCCC</span>
</div>谢谢
命名空间:System.Text.RegularExpressions
下的Regex.Replace()方法,可以处理
ASP.NET 中的正则表达式
void Main()
{
string str=@"^^
~~狮子纪念碑~~
**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
@@卡贝尔桥狮子纪念碑@@
^^
^^
~~AAAA~~
**BBBB**
@@CCCC@@
^^";
string temp=@"<div><span class=""Item1"">{0}</span><span class=""Item2"">{1}</span><span class=""Item3"">{2}</span></div>";
str=Regex.Replace(str,@"(?s)[^~]*?~+([^~]+)~+.*?\*+([^*]+).*?@+([^@]+)@+[^~]*",
m=>string.Format(temp,m.Groups[1].Value,m.Groups[2].Value,m.Groups[3].Value));
Console.WriteLine(str);
//<div><span class="Item1">狮子纪念碑</span><span class="Item2">狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。</span><span class="Item3">卡贝尔桥狮子纪念碑</span></div><div><span class="Item1">AAAA</span><span class="Item2">BBBB</span><span class="Item3">CCCC</span></div>}
void Main()
{
string str=@"^^
~~狮子纪念碑~~
**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
@@卡贝尔桥狮子纪念碑@@
^^
^^
~~AAAA~~
**BBBB**
@@CCCC@@
^^";
string temp=@"<div>
<span class=""Item1"">{0}</span>
<span class=""Item2"">{1}</span>
<span class=""Item3"">{2}</span>
</div>";
str=Regex.Replace(str,@"(?s)[^~]*?~+([^~]+)~+.*?\*+([^*]+).*?@+([^@]+)@+[^~]*",
m=>string.Format(temp,m.Groups[1].Value,m.Groups[2].Value,m.Groups[3].Value));
Console.WriteLine(str);
/*
<div>
<span class="Item1">狮子纪念碑</span>
<span class="Item2">狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。</span>
<span class="Item3">卡贝尔桥狮子纪念碑</span>
</div><div>
<span class="Item1">AAAA</span>
<span class="Item2">BBBB</span>
<span class="Item3">CCCC</span>
</div> */
}
newstr=oldstr.Replace("~~","");
~~狮子纪念碑~~
**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
@@卡贝尔桥狮子纪念碑@@
^^
^^
~~AAAA~~
**BBBB**
@@CCCC@@
^^";
string[] split = { @"\^\^", "~~", @"\*\*", "@@" };
string[] result = { "<div>", "</div>", "<span class=\"Item1\">", "</span>", "<span class=\"Item2\">", "</span>", "<span class=\"Item3\">", "</span>" };
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.Length; i++)
{
Regex reg = new Regex(string.Format(@"(?s){0}(?:(?!{0}).)*{0}", split[i]));
foreach (Match m in reg.Matches(str))
{
string mValue = m.Value;
mValue = Regex.Replace(mValue, string.Format("^{0}", split[i]), result[i * 2]);
mValue = Regex.Replace(mValue, string.Format("{0}$", split[i]), result[i * 2 + 1]);
str=str.Replace(m.Value, mValue);
}
}
Console.WriteLine(str);
Console.ReadLine();
/*
<div>
<span class="Item1">狮子纪念碑</span>
<span class="Item2">狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。</span>
<span class="Item3">卡贝尔桥狮子纪念碑</span>
</div>
<div>
<span class="Item1">AAAA</span>
<span class="Item2">BBBB</span>
<span class="Item3">CCCC</span>
</div>
*/
如果数据不规范呢?
比如:
^^
~~AAA0~~
**BBB0**
@@CCC0@@
^^
^^
~~AAAA~~
@@CCCC@@
^^
就是说,某一项里要是少行呢?
就替换不了了。
//~~狮子纪念碑~~
//**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
//@@卡贝尔桥狮子纪念碑@@
//^^
//^^
//~~AAAA~~
//**BBBB**
//@@CCCC@@
//^^";
string str = @"^^
~~AAA0~~
**BBB0**
@@CCC0@@
^^
^^
~~AAAA~~
@@CCCC@@
^^";
string[] split = { @"\^\^", "~~", @"\*\*", "@@" };
string[] result = { "<div>", "</div>", "<span class=\"Item1\">", "</span>", "<span class=\"Item2\">", "</span>", "<span class=\"Item3\">", "</span>" };
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.Length; i++)
{
Regex reg = new Regex(string.Format(@"(?s){0}(?:(?!{0}).)*{0}", split[i]));
foreach (Match m in reg.Matches(str))
{
string mValue = m.Value;
mValue = Regex.Replace(mValue, string.Format("^{0}", split[i]), result[i * 2]);
mValue = Regex.Replace(mValue, string.Format("{0}$", split[i]), result[i * 2 + 1]);
str=str.Replace(m.Value, mValue);
}
}
Console.WriteLine(str);
Console.ReadLine();
/*
<div>
<span class="Item1">AAA0</span>
<span class="Item2">BBB0</span>
<span class="Item3">CCC0</span>
</div>
<div>
<span class="Item1">AAAA</span>
<span class="Item3">CCCC</span>
</div>
*/
string str = @"^^
~~狮子纪念碑~~
**狮子纪念碑(Lion Monument)是卢塞恩数一数二的雕刻作品。**
@@卡贝尔桥狮子纪念碑@@
^^
^^
~~AAAA~~
**BBBB**
@@CCCC@@
^^";
string result = Regex.Replace(str, @"(?is)\^\^(.*?)\^\^", "<div>$1</div>");
result = Regex.Replace(result, @"(?is)~~(.*?)(?=~~)~~", "<span class=\"Item1\">$1</span>");
result = Regex.Replace(result, @"(?is)\*\*(.*?)(?=\*\*)\*\*", "<span class=\"Item2\">$1</span>");
result = Regex.Replace(result, @"(?is)@@(.*?)(?=@@)@@", "<span class=\"Item3\">$1</span>");
Console.WriteLine(result);