无法使用正则表达式在双引号之间提取字符串

时间:2015-03-24 19:40:14

标签: c# .net regex vb.net string

我正在尝试使用正则表达式提取用双引号括起来的子串:

"\w[\w\s\t]*"

on string:

  

“@ test”跳过“2 3”跳过“TEST”跳过“te st”跳过“@#”

成功提取了粗体子串。但是没有提取具有特殊字符的那些。请帮我解决这个问题。我不是那么专业地制作正则表达式。

4 个答案:

答案 0 :(得分:4)

这个正则表达式应该可行

"(.+?)"

Regex101 demo

它使用Group capture

的概念

答案 1 :(得分:2)

正如埃克斯在评论中所说,尝试使用

  

" [^"] *"

这应该与报价匹配,然后是任何不引用的字符,然后是另一个引号。其他答案与0长度不匹配,具体取决于你想要的是什么。

答案 2 :(得分:1)

string input = @"""@test"" skip ""2 3"" skip ""TEST"" skip ""te st"" skip ""@#""";
var values = Regex.Matches(input, @"\""(.+?)\""")
                  .Cast<Match>()
                  .Select(m => m.Groups[1].Value)
                  .ToList();

答案 3 :(得分:1)

您还可以匹配包含转义双引号的子字符串:

正则表达式:".+?(?<!\\)"

代码:

var txt1 = "\"This is \\\"some text\\\" to capture\" \"no other text\"";
var regex1 = new Regex(@""".+?(?<!\\)""", RegexOptions.IgnoreCase  | RegexOptions.CultureInvariant);
var c1 = regex1.Matches(txt1).Cast<Match>().Select(d => d.Value.Trim()).ToList();

输出:

"This is \"some text\" to capture"
"no other text"