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

时间:2018-04-12 21:55:38

标签: c# regex double-quotes

我需要能够删除单词旁边的双引号,而不删除双引号的单个实例。

IE中。在下面的例子中,正则表达式只应匹配"你好"并且"弹跳",而不删除单词本身。

3.5" HDD

"你好"

"凉爽

"弹跳"

没有引号的单句。

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

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

我在研究中找到的其他密切正则表达式:

1

\"*\"

但这突出了单引号。

Unsuccessful Method 2

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

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

1 个答案:

答案 0 :(得分:2)

你的第一个正则表达式看起来很好,但缺少一个外部捕获组。如果我们将其转换为线性正则表达式,避免交替会更好。

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

我在字符类中包含回车\r\n以防止正则表达式在正则表达式中超过一行,但您可能不需要它们。然后用$1替换整个匹配(对第一个捕获组保存数据的反向引用)。要在C#中转义",请使用双引号""

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, @"$1"));