【问题标题】:To use or not to use regular expressions?使用或不使用正则表达式?
【发布时间】:2010-11-04 15:11:04
【问题描述】:

我刚刚问过这个question 关于使用正则表达式来允许 -90.0 和 +90.0 之间的数字。我得到了一些关于如何实现正则表达式的答案,但大多数答案还提到,如果不使用正则表达式会更好地处理,或者使用正则表达式会过大。那么如何决定何时使用正则表达式,何时不使用正则表达式。有没有可以遵循的检查清单?

【问题讨论】:

  • 添加了 c# 标签,因为您之前的问题是针对 c#。希望没事。
  • 我不认为这个问题是特定于 C# 的。
  • 原来的问题是 C#-implementation specific;这个问题与具体实施无关。
  • 是的,我一开始也想过,但认为这可以应用于任何语言。

标签: regex


【解决方案1】:

正则表达式是一种文本处理工具,用于基于字符的测试。更正式地说,正则表达式擅长处理正则语言,但几乎不擅长其他任何事情。

实际上,这意味着正则表达式不太适合需要在超出字符级别的文本中发现含义语义)的任务。这需要一个成熟的解析器。

在您的特定情况下:识别文本中的数字是正则表达式擅长的练习(可以使用正则语言简单地描述十进制数)。这适用于角色级别。

但是用数字做更高级的事情需要知道它的数值(即它的语义)需要解释。正则表达式在这方面很糟糕。因此,在文本中查找数字很容易。在文本中查找大于 11 但小于 1004(或可被 3 整除)的数字很难:它需要识别数字的含义

【讨论】:

  • 啊,谢谢你,所以识别 -90 和 +90 很容易,但确定一个数字是否介于 -90.0 和 +90.0 之间则更具挑战性。如果我只是在寻找 -90 或 90,那么它只是简单的文本“-90”或“90”,我可以轻松解析,但如果我在寻找它们之间的数字,那么它不仅仅是处理文本.我理解正确吗?我就是这么解释你说的。
【解决方案2】:

我会说正则表达式对字符串最有效。对于其他数据类型,对该数据类型的操作通常会更直观并提供更好的结果。

例如,如果您知道您正在处理 DateTime,那么您可以使用 Parse 和 TryParse 方法来处理不同的格式,并且它通常比您自己的正则表达式更可靠。

在您的示例中,您正在处理数字,因此请相应地处理它们。

Regex 非常强大,但它并不是最容易阅读和调试的代码。当手头有另一个可靠的解决方案时,您可能应该这样做。

【讨论】:

  • 这在技术上是正确的,但不完整 - 正则表达式对 包含常规数据的字符串最有效
【解决方案3】:

如果你有一个包含 regular language 结构信息的字符串,并且你想把这个字符串变成一个对象模型,你应该使用正则表达式。

【讨论】:

    【解决方案4】:

    RegEx 的基本用例:-

    1. 您需要“键值对” - 键和值都嵌入在其他嘈杂的文本中 - 否则无法访问或隔离。

    2. 您需要通过遍历多个文档来自动提取这些值。

    3. 在您对文本进行解析时,可能会发现键值对的数量和组合。

    【讨论】:

      【解决方案5】:

      答案很简单:

      如果您可以不使用正则表达式(仅通过字符串函数)解决您的问题,那么您就不要使用正则表达式。正如我读过的一本书中所说:正则表达式是对计算机的暴力。

      如果使用语言字符串函数比较复杂,请使用正则表达式。

      【讨论】:

      • 虽然是实用的建议,但我认为这个答案不一定是完整的建议。除了用户正在查看十进制数据的字符串表示这一事实之外,这个特定问题与字符串处理没有任何关系。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2014-04-05
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多