在C#中,使用正则表达式类,如何解析逗号分隔的值,其中一些值可能引用字符串本身包含逗号?
using System ; using System.Text.RegularExpressions ; class Example { public static void Main ( ) { string myString = "cat,dog,\"0 = OFF,1 = ON\",lion,tiger,'R = red,G = green,B = blue',bear" ; Console.WriteLine ( "\nmyString is ...\n\t" + myString + "\n" ) ; Regex regex = new Regex ( "(?<=,(\"|\')).*?(?=(\"|\'),)|(^.*?(?=,))|((?<=,).*?(?=,).*?$)" ) ; Match match = regex.Match ( myString ) ; int j = 0 ; while ( match.Success ) { Console.WriteLine ( j++ + " \t" + match ) ; match = match.NextMatch() ; } } }
0 cat 1 dog 2 "0 = OFF 3 1 = ON" 4 lion 5 tiger 6 'R = red 7 G = green 8 B = blue' 9 bear
但是,期望的输出是:
0 cat 1 dog 2 0 = OFF,1 = ON 3 lion 4 tiger 5 R = red,B = blue 6 bear
解决方法
尝试使用这个正则表达式:
"[^"\r\n]*"|'[^'\r\n]*'|[^,\r\n]*
Regex regexObj = new Regex(@"""[^""\r\n]*""|'[^'\r\n]*'|[^,\r\n]*"); Match matchResults = regexObj.Match(input); while (matchResults.Success) { Console.WriteLine(matchResults.Value); matchResults = matchResults.NextMatch(); }
.OUPUTS:
>猫
>狗
>“0 = OFF,1 = ON”
>狮子
老虎
>’R =红色,G =绿色,B =蓝色’
>熊
注意:这个正则表达式解决方案将适用于您的案例,但我建议您使用专门的库,如FileHelpers.