如s.s则为"s.s","s则为"""s","s"则为"""s""",a."s则为"a.""s"
以下为3行(用;分行)共6给元素按以上规则组成的字符串,请对它进行分割(求正则表达式)。
a.b;"c1.c2".d;"d0""d1""".e;
如先按;区分成3行,再按.把每行分成2列(假设每列内容不含有;号)。也就是一个s[3][2]的数组。
分割后:
s[0][0]=a;s[0][1]=b
s[1][0]=c1.c2;s[0][1]=d
s[2][0]=d0"d1";s[2][1]=e
8 个解决方案
#1
你究竟要替换还是要分割
string test = "a.b;\"c1.c2\".d;\"d0\"\"d1\"\"\".e;";
Regex reg = new Regex(@"([^;]+);");
string result = reg.Replace(test, delegate(Match m) {return "\"" + m.Groups[1].Value.Replace("\"", "\"\"") + "\";"; });
richTextBox2.Text = result;
/*------输出------
"a.b";"""c1.c2"".d";"""d0""""d1"""""".e";
*/
#2
提问也是一门艺术
#3
string s= "\"s";
s = "\""+Regex.Replace(s,"\"|[^\"]",m=>m.Value=="\""?"\"\"":m.Value)+"\"";
#4
要分割,但我不知道分割的规则,我只知道分割前元素组合成字符串的原规则,现在是要按原组合规则反向分割。
#5
可能表达不清,要么我换一种说法吧,就是将
a.b."c1.c2"."d""d0""d"
分割成
a
b
c1.c2
d"d0"d
按.分割,但.也有可能是元素的一部分
a.b."c1.c2"."d""d0""d"
分割成
a
b
c1.c2
d"d0"d
按.分割,但.也有可能是元素的一部分
#6
foreach(Match m in Regex.Matches(s,@"(([^"]|"[^"]*")+?)(\.|$)"))
{
TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
}
#7
foreach(Match m in Regex.Matches(s,@"(([^""]|""[^""]*"")+?)(\.|$)"))
{
TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
}
#8
string test = "a.b.\"c1.c2\".\"d\"\"d0\"\"d\"";
Regex reg = new Regex("(?n)\"(?<o>(\"\"|[^\"])*)\"|(?<o>[^.\"]+)");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["o"].Value + "\n";
}
/*-----输出------
a
b
c1.c2
d""d0""d
*/
最后一种情况,不能直接得到d"d0"d,需要进行源字符串的预处理,或者结果的二次处理,把""替换为"
#1
你究竟要替换还是要分割
string test = "a.b;\"c1.c2\".d;\"d0\"\"d1\"\"\".e;";
Regex reg = new Regex(@"([^;]+);");
string result = reg.Replace(test, delegate(Match m) {return "\"" + m.Groups[1].Value.Replace("\"", "\"\"") + "\";"; });
richTextBox2.Text = result;
/*------输出------
"a.b";"""c1.c2"".d";"""d0""""d1"""""".e";
*/
#2
提问也是一门艺术
#3
string s= "\"s";
s = "\""+Regex.Replace(s,"\"|[^\"]",m=>m.Value=="\""?"\"\"":m.Value)+"\"";
#4
要分割,但我不知道分割的规则,我只知道分割前元素组合成字符串的原规则,现在是要按原组合规则反向分割。
#5
可能表达不清,要么我换一种说法吧,就是将
a.b."c1.c2"."d""d0""d"
分割成
a
b
c1.c2
d"d0"d
按.分割,但.也有可能是元素的一部分
a.b."c1.c2"."d""d0""d"
分割成
a
b
c1.c2
d"d0"d
按.分割,但.也有可能是元素的一部分
#6
foreach(Match m in Regex.Matches(s,@"(([^"]|"[^"]*")+?)(\.|$)"))
{
TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
}
#7
foreach(Match m in Regex.Matches(s,@"(([^""]|""[^""]*"")+?)(\.|$)"))
{
TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
}
#8
string test = "a.b.\"c1.c2\".\"d\"\"d0\"\"d\"";
Regex reg = new Regex("(?n)\"(?<o>(\"\"|[^\"])*)\"|(?<o>[^.\"]+)");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["o"].Value + "\n";
}
/*-----输出------
a
b
c1.c2
d""d0""d
*/
最后一种情况,不能直接得到d"d0"d,需要进行源字符串的预处理,或者结果的二次处理,把""替换为"