c# 正则表达式引号

Posted

技术标签:

【中文标题】c# 正则表达式引号【英文标题】:c# Regex quotes 【发布时间】:2021-09-02 02:09:03 【问题描述】:

如何解析字符串"\"bcd ef\" a 'x y'",并使用正则表达式捕获引号",' 和没有它们之间的所有文本?我尝试了模式"(\\\"|')(.*?)(\\\"|'),但只得到了"bcd ef"'x y'。结果应该是:

    "bcd ef"

    a

    'x y'

     string pattern   ="(\\\"|')(.*?)(\\\"|')";
     Regex regex = new Regex(pattern);
    

【问题讨论】:

您的结果和描述不匹配,因为a 不是 between quotes 更正了主题。我需要全部解析。 那么简单地“拆分字符串”怎么样? 我尝试学习正则表达式。学习解析不同的方式。正则表达式不适合解析吗? 了解正则表达式是一件好事且必要的事情。但最重要的教训是:只有在真正需要时才使用它,没有其他解决方案可行。因为正则表达式难以理解、难以维护,而且如果做错了,可能会成为绝对的性能杀手。为了更好地理解它们,顺便推荐一下regex101.com 【参考方案1】:

两个选项是 string.Split() 或 Regex.Split()。 string.Split() 更快,但 Regex.Split() 更强大。

string.Split()版本:

        var parts = input.Split(new []'"', '\'')
            .Where(p => !string.IsNullOrEmpty(p))
            .Select(p => p.Trim())
            .ToList();

Regex.Split()版本:

        var input = "\"bcd ef\" a 'x y'";
        var parts = Regex.Split(input, "[\"']")
            .Where(p => !string.IsNullOrEmpty(p))
            .Select(p => p.Trim())
            .ToList();

只要你想按单个字符分割,正则表达式版本就更慢了。所以没有理由使用它。

文档:

https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.split https://docs.microsoft.com/en-us/dotnet/api/system.string.split

【讨论】:

以上是关于c# 正则表达式引号的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用正则表达式过滤多行双引号字符串

C# 正则表达式拆分引号和逗号语法错误 [重复]

使用正则表达式在 C# 中使用转义引号查找带引号的字符串

如何使用 C# 和正则表达式删除引号 (") 内的所有逗号

C#正则表达式用分隔符分割行,但忽略引号内的分隔符

正则表达式 (C#):匹配 > < 或(非法 XML 字符)但仅当包含在引号内时