Welcome 微信登录

首页 / 网页编程 / ASP.NET / 用,号分隔的正则表达式

用,号分隔的正则表达式2011-03-26 博客园 曹宗颖先给一个例子吧。

有下列字符串:

“reservation,rental,type”

我想用根据,号,将该字符串转换成数组。不用说,有一个最简单的方法,用 string.Split(new char[]{‘,’})可以轻松办到。

1 string[] strs = string.Split(new char[]{","};
2 foreach (string str in strs)
3 {
4 //...
5 }

但是,假设某一个数据中本身就包含了,号呢?例如:

“reser,vation,rental,type”

假设reser,vation本身是一个完整的数据,这下如果再用上面的方法就会出大问题了 。如果能够用,之类的标记,将该,号保留在数据中,而不是用作分隔字符串的标记就好 了。

所以,思考了一下,试着用正则表达式来解决这个问题。先将代码粘贴在这里,不知 道是否有更好的方法。

1 var spliters = Regex.Split(values, @"([^\],)");

1 for (int i = 0; i < spliters.Length; ++i)
2 {
3 if (i % 2 == 1)
4 {
5 spliters[i - 1] += spliters[i].Substring(0, 1);
6 spliters[i] = spliters[i].Substring (1);
7 }
8
9 }
1 假设我用上面的正则表达式来分析一下数据。
1 “reser,vation,rental,type”
1 会得到一下结果
1 reser,vati
1
1 rental
1 ,
1 type
1 你会发现,第一个n和,号被作为分隔符捕获 。这显然不是我所需要的,所以又用了下面的for循环对该数据进行修正。

1 for (int i = 0; i < spliters.Length; ++i)
2 {
3 if (i % 2 == 1)
4 {
5 spliters[i - 1] += spliters[i].Substring(0, 1);
6 spliters[i] = spliters[i].Substring (1);
7 }
8
9 }

修正后的结果是

reser,vation
,
rental
,
type

不知道大家是否有更好的想法。先谢谢了。