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

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

  1. "bcd ef"

  2. a

  3. 'x y'

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

【问题讨论】:

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

标签: c# regex


【解决方案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();

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

文档:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2010-12-01
    • 2010-09-18
    相关资源
    最近更新 更多