如何用正则表达式分割以下字符串?

anderax 2010-12-23 11:36:55
规则:如果元素中有.则把此元素用""包住,如果有双引号则用2个双引号代替,并最后用""包围元素。
如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
...全文
173 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
abrianna 2010-12-23
  • 打赏
  • 举报
回复
foreach(Match m in Regex.Matches(s,@"(([^""]|""[^""]*"")+?)(\.|$)"))
{
TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
}
abrianna 2010-12-23
  • 打赏
  • 举报
回复
foreach(Match m in Regex.Matches(s,@"(([^"]|"[^"]*")+?)(\.|$)"))
{
TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
}
anderax 2010-12-23
  • 打赏
  • 举报
回复
可能表达不清,要么我换一种说法吧,就是将
a.b."c1.c2"."d""d0""d"
分割成
a
b
c1.c2
d"d0"d

按.分割,但.也有可能是元素的一部分

anderax 2010-12-23
  • 打赏
  • 举报
回复
要分割,但我不知道分割的规则,我只知道分割前元素组合成字符串的原规则,现在是要按原组合规则反向分割。
abrianna 2010-12-23
  • 打赏
  • 举报
回复
string s= "\"s";
s = "\""+Regex.Replace(s,"\"|[^\"]",m=>m.Value=="\""?"\"\"":m.Value)+"\"";
q107770540 2010-12-23
  • 打赏
  • 举报
回复
提问也是一门艺术
-过客- 2010-12-23
  • 打赏
  • 举报
回复
你究竟要替换还是要分割


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";
*/
-过客- 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anderax 的回复:]
可能表达不清,要么我换一种说法吧,就是将
a.b."c1.c2"."d""d0""d"
分割成
a
b
c1.c2
d"d0"d

按.分割,但.也有可能是元素的一部分
[/Quote]

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,需要进行源字符串的预处理,或者结果的二次处理,把""替换为"

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧