2012-08-10 60 views
2

我是相当新的,我无法得到这个正常工作。c#使用正则表达式来解析引号之间的字符串

我有这个字符串

[ “字符串1”, “字符串2”, “STRING3”, “串,4”, “STRING5”, “string6”, “string7”, “string8”, “string9” “string10”]

而且我想要得到的“

我认为,正则表达式将是最好的做任务。

感谢您的帮助。

之间的所有值
+2

这不是一个字符串? – Thomas 2012-08-10 13:24:47

+2

这不是一个字符串。 – Polyfun 2012-08-10 13:24:55

+0

那是什么? – maddo7 2012-08-10 13:26:17

回答

5

这将引号之间捕捉:

(?<=")[\w]+(?!=") 

的扩展案例:

string s = "[\"string1\",\"string2\",\"string3\",\"string4\",\"string5\",\"string6\",\"string7\",\"string8\",\"string9\",\"string10\"]"; 

foreach (Match m in Regex.Matches(s, "(?<=\")[\\w]+(?!=\")")) { 
    Console.WriteLine(m.Value); 
} 
+0

OP,这是比分裂版本更好的答案 – 2012-08-10 13:44:01

+0

@RyanCopley你能解释为什么你认为它比分割字符串更好吗?IMO使用正则表达式来简化像这样的字符串操作是矫枉过正的。它使用分割比使用正则表达式更有效... – James 2012-08-10 13:48:16

+1

单个使用场景的效率是值得商榷的..但后来我们猜测:)我希望它以某种方式提供帮助无论如何:) – 2012-08-10 14:11:19

1

在我看来,这是为Split,而不仅仅是正则表达式工作:

string str = "[\"string1\",\"string2\",\"string3\",\"string4\",\"string5\",\"string6\",\"string7\",\"string8\",\"string9\",\"string10\"]"; 
Regex rgx = new Regex("[\\[\\]\"]"); // get rid of the quotes and braces 
str = rgx.Replace(str,""); 
string [] split = str.Split(','); // split on commas. that's it. 

foreach (string s in split) 
{ 
    Console.WriteLine(s); 
} 

这不需要特殊的匹配正则表达式,如果你引用的字符串变得混乱,你可能会改变它。因此,它(再次,在我看来)更加优雅。

0

如果你的意思是你有一个CSV字符串,例如

"\"string1\", \"string2\", \"string3\"" 

然后,你不需要为微不足道,因为这东西正则表达式,你可以使用String.Split与LINQ洒:

var values = csvString.Split(',').Select(s => s.Replace("\"", "").Trim()); 
+0

如果引用的字符串包含逗号,则无法执行此操作。 – alltej 2017-06-20 19:33:51

+0

@alltej我没有说这是一个通用的解决方案,它是一个将为给定的示例数据工作:) – James 2017-06-22 08:51:30

2

因为这看起来像JSON,请尝试使用JavaScriptSerializer

string myString = "[\"string1\",\"string2\",\"string3\",\"string4\",\"string5\",\"string6\",\"string7\",\"string8\",\"string9\",\"string10\"]"; 

string[] strings = (new JavaScriptSerializer()).Deserialize<string[]>(myString); 

foreach (string str in strings) 
{ 
    Console.WriteLine(str); 
} 

有点似乎矫枉过正。

相关问题