C#正则表达式:去掉前后的双引号(")

15
如果我有一个以下的字符串...有什么正则表达式可以删除(可选的)前导和尾随双引号?加分题,它能否还删除引号外的任何可选空格:
string input = "\"quoted string\""   -> quoted string
string inputWithWhiteSpace = "  \"quoted string\"    "  => quoted string

(用于C#的Regex.Replace函数)

6个回答

43
使用Regex.Replace来完成这个任务有些过头了。可以使用Trim代替它。
string output = input.Trim(' ', '\t', '\n', '\v', '\f', '\r', '"');

如果你只想去除在引号外部的空格,而保留在引号内部的任何空格:

string output = input.Trim().Trim('"');

2
我知道这不太常见,但如果你的内部字符串以任何一个开头或结尾,你也会将它们修剪掉。例如,Size 8""Size 8"""(如果它转义了双引号)最终会变成 Size 8 - Andrew

10
除了使用正则表达式外,您还可以使用String.Trim() - 这样更易于阅读、理解和维护。
var result = input.Trim('"', ' ', '\t');

3

请用空字符串替换^\s*"?|"?\s*$

在C#中,正则表达式应为:

string input = "  \"quoted string\"    "l
string pattern = @"^\s*""?|""?\s*$";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, "");
Console.WriteLine(result);

在C#中不可能使用@"^\s"?|"?\s$"。在逐字字符串中,用""代替"表示引号。此外,您无需创建Regex的新实例,只需使用Regex.Replace即可。 - Yuriy Faktorovich

1

我创建了另一个稍微修改过的模式,对我来说效果相当不错。希望这有助于区分普通的命令行参数和充当单个参数的双引号词组。

String pattern = "(\"[^\"]*\"|[^\"\\s]+)(\\s+|$)";

我的使用:// 先吃掉第一个参数(因为它是C#文件名) argsLine = new Regex("("[^"]*"|[^"\s]+)").Replace(argsLine, "");使用类似的正则表达式方法。 :-) - TarmoPikaro

1

我会使用String.Trim方法,但如果你想要正则表达式,可以使用这个:

@"^(\s|")+|(\s|")+$"

0

我来发表一下我的看法,因为我找不到我想要的东西。这个版本会删除每对引号及其两侧的空格中的第一个。

        public static string RemoveQuotes(string text)
        {
            var regex = new Regex(@"^\s*\""\s*(.*?)\s*\""\s*$");
            var match = regex.Match(text);
            if (match.Success && match.Groups.Count == 2)
            {
                return match.Groups[1].Value;
            }
            return text;
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接