【问题标题】:C# multiple patterns in regex.replace()regex.replace() 中的 C# 多个模式
【发布时间】:2010-08-01 21:27:19
【问题描述】:

如何将多个模式传递给 regex.replace() 模式参数?

在 PHP 中,您只需放弃包含它们的数组。 C# 中是否有某种相同的选项?

我正在遍历一些用户名,其中一些用户名被 html 标记包围。 html标签并不完全相同。但我确实知道它们是什么。

因此,如果我可以传递多个模式以在 regex.replace() 模式参数中查找,那就太好了。或者我必须为每个 html 标签创建一个单独的模式并运行 regex.replace() 函数。

希望我清楚自己要完成的工作!

提前致谢!

[编辑] @艾伦·摩尔,

底线,从字符串中删除所有 html 标签,是我想要做的。

[/编辑]

【问题讨论】:

  • 如果您告诉我们您要做什么,而不是您要如何做,您会得到更好的帮助。忘掉你从其他语言知道的噱头,告诉我们你想要达到什么结果。请编辑您的问题并将信息放在那里,而不是在评论中。

标签: c# .net regex


【解决方案1】:
// I’m assuming you have a regex for each thing you want to replace
List<string> multiplePatterns = [...];

string result = Regex.Replace(input, string.Join("|", multiplePatterns), "");

【讨论】:

  • 这是一个很好的例子。我一直在寻找这种方法来实现一种将一个或多个条件添加到正则表达式的通用方法,我希望用户能够指定他们自己的条件。我假设您也可以提供一个字符串数组而不是列表。
【解决方案2】:

使用正则表达式分隔符|,例如:

</?html>|</?head>|</?div>

【讨论】:

    【解决方案3】:

    所以你有一个字符串列表,每个字符串完全由一个用户名组成,可选地包含在 HTML 标记中?它们是哪些标签无关紧要。只需删除任何 看起来 像标签的东西:

    name = Regex.Replace(name, @"</?\w+[^<>]*>", String.Empty);
    

    【讨论】:

      【解决方案4】:

      如果性能很重要,并且用户名中不存在“”的风险,则可以这样做:

      string RemoveTags(string s)
              {
                  int startIndex = s.IndexOf('<');
                  int endIndex = s.IndexOf('>');
                  return startIndex >= 0 && endIndex >= 0 ? RemoveTags(s.Remove(startIndex, endIndex - startIndex + 1)) : s;
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多