使用还是不使用正则表达式?

22

我刚刚提出了这个问题,关于如何使用正则表达式允许介于-90.0到+90.0之间的数字。我得到了一些实现正则表达式的答案,但大多数答案也提到,最好不要使用正则表达式或使用正则表达式会过度解决。那么,何时使用正则表达式,何时不使用正则表达式?是否有一个可遵循的检查清单?


由于您之前的问题是关于C#的,所以我添加了C#标签。希望这没问题。 - Shoban
5
我认为这个问题并不特定于C#。 - Tim Schmelter
这个问题与C#实现无关,是非实现特定的。 - Michael Paulukonis
是的,一开始我也考虑过这个问题,但我认为这个方法可以适用于任何编程语言。 - Xaisoft
5个回答

51

正则表达式是一种用于处理文本的工具,用于基于字符的测试。更正式地说,正则表达式适用于处理正则语言,但在处理其他任何东西时都不太适用。

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

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

但是,做更高级的需要了解其数值(即其语义)的数字操作需要解释。 正则表达式不擅长此类操作。 因此,在文本中查找数字很容易。 在文本中查找大于11但小于1004的数字(或可被3整除的数字)很难:这需要识别数字的含义。


5
谢谢您的信息,识别-90和+90很容易,但确定一个数字是否在-90.0和+90.0之间则更具挑战性。如果我只是寻找-90或90,那么它只是简单的文本“-90”或“90”,我可以轻松解析,但如果我要寻找这些之间的数,那么它就不仅仅是处理文本了。 我理解得对吗?这是我理解您说的话的方式。 - Xaisoft

3
我认为正则表达式最适用于字符串。对于其他数据类型,操作该数据类型通常更直观且提供更好的结果。
例如,如果您知道正在处理DateTime,则可以使用Parse和TryParse方法以不同的格式进行处理,这通常比自己编写的正则表达式更可靠。
在您的示例中,您正在处理数字,因此应相应地处理它们。
正则表达式非常强大,但它不是最容易阅读和调试的代码。当有另一个可靠的解决方案时,您应该选择该方案。

这在技术上是正确的,但不完整 - 正则表达式在包含正则数据的字符串上最有效。 - Rex M

2
不是故意说话含糊或晦涩,当你有一个包含以正则表达式结构化信息的字符串,并且想将这个字符串转换成对象模型时,应该使用正则表达式。

1

RegEx的基本用例:

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

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

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


0
答案很简单:
如果你可以通过字符串函数解决问题而不需要使用正则表达式,那么就不要使用正则表达式。正如我读过的一本书所说:正则表达式是对计算机的暴力。
如果使用语言字符串函数太复杂了,那么就使用正则表达式。

虽然提供了实用的建议,但我认为这个答案并不是完整的建议。这个问题实际上与字符串处理没有什么关系,除了用户正在查看十进制数据的字符串表示形式之外。 - GrayWizardx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接