profile for Macon_Cao at Stack Overflow, Q&A for professional and enthusiast programmers

用,号分隔的正则表达式

先给一个例子吧。

有下列字符串:

“reservation,rental,type”

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

string[] strs = string.Split(new char[]{','};
foreach(string str in strs)
{
	//...
}

 

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

“reser,vation,rental,type”

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

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

var spliters = Regex.Split(values, @"([^\\],)");
            
for (int i = 0; i < spliters.Length; ++i)
            {
                if (i % 2 == 1)
                {
                    spliters[i - 1] += spliters[i].Substring(0, 1);
                    spliters[i] = spliters[i].Substring(1);
                }

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

            }

 

修正后的结果是

reser\,vation

,

rental

,

type

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

posted on 2010-03-13 09:54  无所畏惧,有所期待  阅读(2960)  评论(11编辑  收藏  举报