【问题标题】:Running a regular expression on a String using Linq使用 Linq 在字符串上运行正则表达式
【发布时间】:2012-05-17 14:43:12
【问题描述】:

我有一个字符串,我希望使用 Linq 运行一个正则表达式来将我的字符串缩减为一个与我的 reg ex 匹配的较小的子字符串。

我现在的代码给出了错误

'char' 不包含 'Name' 的定义,也没有扩展名 接受“char”类型的第一个参数的方法“名称”可以是 找到了

我的代码:

string variable = result.Name.Select(r => regEx.Match(r.Name).Groups[2].ToString());

Result.Name 是自定义类中包含的字符串。

我做错了什么?我的语法/理解有什么问题?

【问题讨论】:

  • 为什么不能只使用正则表达式?
  • Select() 会将字符串的每个字符转换为其他字符。您必须将正则表达式应用于您的字符串,那么为什么要使用 Select?
  • 你到底想做什么?

标签: c# regex string linq


【解决方案1】:

你在寻找这样的东西吗?

string[] result = Regex.Matches(input, pattern)
                       .Cast<Match>()
                       .Select(match => match.Groups[2].Value)
                       .ToArray();

【讨论】:

    【解决方案2】:

    您在单个字符串上调用 SelectSelect 将您的字符串视为一系列字符,因此 lambda 表达式中的 rchar

    如果您只想将一个字符串传递给正则表达式,并且只需要一个匹配项,那么您根本不需要 LINQ。只需拨打电话

    string variable = regEx.Match(result.Name).Groups[2].ToString();
    

    (根据您的示例代码,我假设 result.Name 是您的单个字符串。)

    【讨论】:

      【解决方案3】:

      不应该吗

      string variable = result.Select(r => regEx.Match(r.Name).Groups[2].ToString());
      

      如果您在 Name 字段上运行 Select,您将在一个字符串上运行它,该字符串是一个 char 数组

      【讨论】:

        【解决方案4】:

        这应该可以...

        string result = result.Name.Select(@regEx => Regex.Match(match.Groups[2].ToString(), @regEx));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          相关资源
          最近更新 更多