【问题标题】:Regex combine more than 1 function正则表达式结合了多个函数
【发布时间】:2014-03-20 08:46:46
【问题描述】:

如何在我的代码中为一个字符串调用 2 个函数?

public static string ecleaner(string str)
  {
    return Regex.Replace(str, "[éèê]+", "e", RegexOptions.Compiled);
  }

public static string acleaner(string str)
  {
    return Regex.Replace(str, "[áàâ]+", "a", RegexOptions.Compiled);
  }

现在我想检查“Téèááést”这个词,之后它应该看起来像 Teaest。

【问题讨论】:

  • str = acleaner(ecleaner(str))

标签: c# regex replace


【解决方案1】:

您可以使用MatchEvaluator 委托,如下所示:

public static string cleaner(string str)
{
    return Regex.Replace(str, "(?<a>[áàâ]+)|(?<e>[éèê]+)", onMatch, RegexOptions.Compiled);
}

private static string onMatch(Match m)
{
    if (m.Groups["a"].Success)
        return "a";
    if (m.Groups["e"].Success)
        return "e";

    return "";
}

或者:

public static string cleaner(string str)
{
    var groups = new[] { "a", "e" };
    return Regex.Replace(str, "(?<a>[áàâ]+)|(?<e>[éèê]+)", m => groups.First(g => m.Groups[g].Success), RegexOptions.Compiled);
}

【讨论】:

    【解决方案2】:

    你试过了吗?

    string str = "Téèááést";
    str = ecleaner(str);
    str = acleaner(str);
    

    【讨论】:

      【解决方案3】:
          public static class StringExtensions
          {
              public static string ecleaner(this string str)
              {
                  return Regex.Replace(str, "[éèê]+", "e", RegexOptions.Compiled);
              }
      
              public static string acleaner(this string str)
              {
                 return Regex.Replace(str, "[áàâ]+", "a", RegexOptions.Compiled);
              }
          }
      
          //...
      
          var result = "Téèááést".ecleaner().acleaner();
      

      您还可以将扩展方法类与@p.s.w.g 的答案结合起来,让事情变得更加整洁。

      【讨论】:

        猜你喜欢
        • 2018-07-04
        • 2016-10-23
        • 2015-01-14
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多