把一个字符串按","分组,要求","前不能有"\"转义.
比如有串@"a=a\bc,b=bc\\,c=cd"
分组后结果应该是一个长度为3的字符串组,
{@"a=a\bc",@"b=bc\\","c=cd"}
比如有串@"a=a\bc,b=bc\\,c=cd"
分组后结果应该是一个长度为3的字符串组,
{@"a=a\bc",@"b=bc\\","c=cd"}
解决方案 »
- 大家帮忙看个T-SQL语句问题?
- asp.net标签textbox 的失去焦点触发的方法
- 从网上下载源码研究,但是数据库那块一直都有问题,连接不上。大家看看是什么原因。
- 泛型返回值的方法如何写?
- 刚工作的困惑...应该反思自己...
- 存储过程中Tag的添加
- 仍然问一个文本框回车的问题,高手帮一下.
- vs与dw处理界面的初级问题
- INSERT INTO 语句的语法错误。不会吧!!!!!!!!!!!!!!!!
- 关于visual studio.net的使用
- AspNetPager 免费分页控件 7.0 遇到的问题,有图,大家帮忙看看。谢谢!
- 请问有那位大侠知道怎么去控制TreeView的折叠和展开问题?
就是ibm的目录服务中的dn串,里面的","是可以转义的.想把它拆分开.
谢谢呆呆虫兄弟
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex);
string[] result = reg.Split(content);
for (int i = 0; i < result.Length; i++)
{
//MessageBox.Show(result[i]);看看result[i]是不是楼主想要的?
}
就是ibm的目录服务中的dn串,里面的","是可以转义的.想把它拆分开.
-------------------------------------------
需求变了,把新的结果也贴一下,看看是不是这样的吧string test = @"a=a\,bc,b=bc\\,c=cd";
string[] result = Regex.Split(test, @"(?<=[^\\]|(\\\\)+),", RegexOptions.ExplicitCapture);
foreach (string str in result)
{
Console.WriteLine(str);
}
一个逗号分隔的串a,b,c,d... 要把它按","分割成字符串组,即:A[0]=a;A[1]=b;A[2]=c...
所有的子串如a,b,c或d中可以出现",",但前面要加"\"转义,表示其是单个串中的一部分,而不是用来分隔多个子串的.
另外,子串(如a)中若有偶数个"\"后面跟","的,因为","前面的所有"\"都被转义为串的一部分,不再有转义效果,所以这个","是用来分隔多个子串的.eg:input=@"a=a\,bc,b=bc\\,c=cd";
处理之后会被分为3个串,A[0]=@"a=a\,bc",A[1]=@"b=bc\\",A[2]="c=cd"root_ ,我原来的写法和你的一样,得到的结果也一样:)
用这个模式串得到的结果是个length为4的数组,a=a\,bc;b=bc\\;\\;c=cd 第三个子串@"\\"很奇怪,不知道是怎么来的.还有symbol441,用你的模式串匹配出来的结果中第三个子串居然是",c=cd"实在不解.多谢楼上的朋友们.
string content = @"a=a\bc,b=bc\\,c=cd"; string regex = "(?<=(?:\\\\\\\\)),|(?<!\\\\),"; System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex);
string[] result = reg.Split(content);
for (int i = 0; i < result.Length; i++)
{
MessageBox.Show(result[i]);//看看result[i]是不是楼主想要的?
}这样就行了
还有这个模式串如果对于普遍的情况需要怎么写?问题的简单描述就是前面跟奇数个"\"的","要看做子串中的一部分,前面跟偶数个"\"的","(包括0个)要看做是分隔符号.希望能写得详细一些.
抱歉,我真的有点头晕了.
用这个模式串得到的结果是个length为4的数组,a=a\,bc;b=bc\\;\\;c=cd 第三个子串@"\\"很奇怪,不知道是怎么来的.
----------------
楼主用我写的测过吗,你确定结果是个length为4的数组吗?
在没有加ExplicitCapture参数之前确实是4的,但是加了这个参数之后,就是3了
string test = @"a=a\,bc,b=bc\\,c=cd";
string[] result = Regex.Split(test, @"(?<=[^\\]|(\\\\)+),", RegexOptions.ExplicitCapture);
foreach (string str in result)
{
Console.WriteLine(str);
}
输出结果为
a=a\,bc
b=bc\\
c=cd
string[] result = Regex.Split(test, @"(?<=[^\\](|(\\\\)+)),", RegexOptions.ExplicitCapture);
foreach (string str in result)
{
Console.WriteLine(str);
}
上面例子输出结果为
a=a\,bc
b=bc\\\,c=cd
test = test.Trim(',');
处理一下再分割的,否则第一项的结果是没有意义的空字符串
@"a=a\,bc,b=bc\\,c=cd,d=dso\\\,d,e=a"
对于这个串,你的模式好像不能正确分割.
开头如果出现","也会是"\,"或"\\\,"等形式.
a=a\,bc
b=bc\\
c=cd
d=dso\\\,d
e=aLength=5
如果不是这个结果,那给出你的结果还有如果开头出现“,”,“\,”,“\\,”分别对应什么样的结果,给出例子
在分组时必须加上RegexOptions.ExplicitCapture
忽略所有非显式命名的分组
以前我一直以为ExplicitCapture只对捕获结果中的组有影响.
还是不太明白为什么不捕获非显式分组会对结果有影响