【问题标题】:Regex Signification '[:*]+' and comparison with a LINQ request正则表达式表示 '[:*]+' 并与 LINQ 请求进行比较
【发布时间】:2014-05-16 14:57:26
【问题描述】:

我不熟悉正则表达式。

你能解释一下这条规则吗?

str = Regex.Replace(str, "[:*]+", "");

使用 LINQ 请求或简单的 str.replace() 是否可以更轻松/更快地完成?

【问题讨论】:

  • 既不简单也不快速。您将需要多个替换调用,这将创建多个临时字符串。 LINQ 会更糟,因为它首先将字符串转换为 char 数组,过滤并重建它。无论如何,这仅适用于琐碎的情况,因为任何更复杂的事情(例如检查两个或更多字符)都需要复杂的代码
  • Jeffrey E. F. Friedl (O'Reilly & Associates) 有一本很棒的书,Mastering Regular Expressions,我强烈建议您阅读。正则表达式是程序员学习使用的一项非常重要的技能。
  • 这个网站真的很好,谢谢:)
  • 我已经做了这样的一行:str.Replace('x', '').Replace('y', ''); 开启像str = Regex.Replace(str, "[xy]+", ""); 这样的正则表达式会更好吗?

标签: c# regex linq regex-lookarounds


【解决方案1】:

[] 定义了一组可以填充该位置的字符,+ 表示它是其中一个或多个。这将匹配任何系列的 : 和 * 字符。例如 * 或 :*: 或 :。它将获取任何匹配的内容并将其删除,因为它什么都没有替换它们。

至于更快的方法来做到这一点。特别是如果您不止一次这样做和/或可以编译正则表达式以多次使用,这正是正则表达式旨在快速有效地处理的事情。

【讨论】:

  • 好的,谢谢。我虽然 * 是正则表达式中的特殊字符,但正如您描述的这条规则,它可能不是 [] 中的特殊字符。
  • @wyles 正确,在 [] 内部它只是组成您正在定义的字符类的字符列表。模式在 [] 中没有意义。
猜你喜欢
  • 2020-02-29
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多