正则表达式删除单词周围的一对双引号,但不删除双引号的单个实例

Regex Remove pair of double quotes around word, but not single instances of double quotes

我需要能够删除单词周围的一对双引号而不删除单个双引号实例。

即。在下面的示例中,正则表达式应该只匹配 "hello" 和 "bounce",而不删除单词本身。


3.5" 硬盘

"hello"

“酷

"bounce"

单句不带引号。


到目前为止我发现的最接近的正则表达式是下面这个,但这突出显示了整个 "bounce" 词,这是不可接受的,因为我需要保留这个词。

"([^\"]|\")*"

我在研究中发现的其他接近正则表达式:

1.

\"*\"

但这突出显示了单引号。

Unsuccessful Method 2

这需要在 C# 代码中可用。

我一直在使用 RegexStorm 来测试我的正则表达式:http://regexstorm.net/reference

您的第一个正则表达式似乎不错,但缺少外部捕获组。如果我们将其转换为线性正则表达式会更好,避免交替。

"([^\"\r\n]*(?:\.[^\"\r\n]*)*)"

我在字符 class 中加入了回车符 return \r\n 以防止正则表达式在正则表达式中超过一行,但是您可能不需要它们。然后用 </code> 替换整个匹配项(对第一个捕获组保存数据的反向引用)。要在 C# 中转义 <code>",请使用双引号 "".

Live demo

C#代码:

string pattern = @"""([^\""\r\n]*(?:\.[^\""\r\n]*)*)""";
string input = @"3.5"" hdd
    ""hello""
    ""cool
    ""bounce""
    single sentence with out quotes.";

Regex regex = new Regex(pattern);
Console.WriteLine(regex.Replace(input, @""));