【问题标题】:What is this RegEx statement doing?这个 RegEx 语句在做什么?
【发布时间】:2009-07-28 15:44:46
【问题描述】:

我根本不声称自己是 RegEx 专家,我对这句话的作用有点困惑。我正在尝试重构,这是在按键时调用的,并且会占用大量 CPU。

Regex.Replace(_textBox.Text, "(?<!\r)\n", Environment.NewLine);

谢谢。

【问题讨论】:

  • 您是说每次按下某个键时都尝试替换文档中的所有换行符吗?如果是这样,那么这就是您的性能问题的根源。无论如何,你为什么要这样做?
  • 如果你真的想经常使用正则表达式,编译它
  • 不是我的选择,并且 Replace 是一种静态方法。在执行此操作之前,我添加了一个“if _textBox.Contains("\n")”,它节省了大量的 cpu

标签: c# .net regex refactoring


【解决方案1】:

正则表达式(?&lt;!\r)\n 将匹配任何前面没有\r 字符的\n 字符。语法 (?&lt;!expr)negative look-behind assertion 并且意味着 expr 必须 not 匹配之前的部分当前位置。

【讨论】:

    【解决方案2】:

    除了解释正则表达式作用的答案(匹配所有 \n 之前没有 \r 的情况)之外,我只想指出,除非你有用户一心只想以某种方式输入 \n。即使这样,您可能也不需要在按键上使用它,只是在使用整个文本时(即在以某种方式提交数据之后)。

    如果将它放在那里是为了清理复制粘贴的文本,那么您可以将其重构为仅在大量文本已更改时运行。

    【讨论】:

      【解决方案3】:

      它正在用 Environment.NewLine 字符串替换前面没有 \r 的 \n 的每个实例。此字符串是特定于平台的换行符(在 Windows 上它将是字符串“\r\n”)

      【讨论】:

      • @Jared NewLine 字符串会因环境而异,因此不会总是\r\n
      【解决方案4】:

      正则表达式会将前面没有回车符 \r 的任何换行符 \n 与平台特定的换行符匹配。

      NewLine 字符是:

      • \r\n 用于非 Unix 平台
      • \n 适用于 Unix 平台

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 2017-07-17
        • 1970-01-01
        相关资源
        最近更新 更多