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

Posted

技术标签:

【中文标题】无法使用正则表达式在双引号之间提取字符串【英文标题】:Unable to extract string between double quotes using regex 【发布时间】:2015-05-28 06:47:09 【问题描述】:

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

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

在字符串上:

“@test”跳过“2 3”跳过“TEST”跳过“测试”跳过“@#”

粗体子串被成功提取。但不提取带有特殊字符的。请帮我解决这个问题。我不太擅长制作正则表达式。

【问题讨论】:

提示:\w 只接受字母、数字和下划线。 您可以使用 [^"](即“非引号”)作为字符类。 【参考方案1】:

这个正则表达式应该可以工作

"(.+?)"

Regex101 demo

它使用Group capture的概念

【讨论】:

【参考方案2】:

正如 eckes 在他的评论中所说,尝试使用

"[^"]*"

这应该匹配一个引号,然后是任意数量的非引号字符,然后是另一个引号。其他答案将不匹配 0 长度,具体取决于您是否想要。

【讨论】:

【参考方案3】:
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();

【讨论】:

我想,又是同一个跟踪狂……***.com/a/29242340/2345956 对答案有什么想说的吗?【参考方案4】:

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

正则表达式:".+?(?&lt;!\\)"

代码:

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"

【讨论】:

以上是关于无法使用正则表达式在双引号之间提取字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式从引号之间提取包含所需字符串的组? [关闭]

正则表达式使用提升令牌迭代器提取单引号和括号之间的值

正则表达式多引号选择

Python正则表达式获取引号之间的字符串

正则表达式返回两个引号之间的字符串“?

Python正则表达式怎么区配引号之间的内容