用,号分隔的正则表达式
先给一个例子吧。
有下列字符串:
“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
不知道大家是否有更好的想法。先谢谢了。