gpt4 book ai didi

regex - 什么时候最好在基本的字符串拆分/子字符串化上使用正则表达式?

转载 作者:行者123 更新时间:2023-12-03 13:24:56 24 4
gpt4 key购买 nike

在出现需要部分字符串,有关该字符串的信息等情况时,对我而言,似乎经常选择使用字符串分析还是使用正则表达式。

之所以出现这种情况,是因为我们正在评估肥皂头的 Action ,在之后,它已通过WCF的OperationContext对象解析为可管理的内容,然后做出决定。现在,简单的解决方案似乎是基本的子字符串化,以保持实现的简单性,但是我的一部分想知道RegEx是更好还是更健壮。我的另一部分想知道在我们的特定场景中是否会像使用a弹 Gunicorn 死苍蝇一样。

因此,我不得不问,人们在尝试决定在典型的字符串解析中使用RegEx时使用的典型阈值是多少?请注意,我对正则表达式不是很坚强,因此,我尽量避免使用,除非避免引入比我需要更多的并发症绝对至关重要。

如果您无法通过我选择的缩写来区分,那么这是在.NET Realm (C#)中,但是我认为这对这个问题没有多大影响。

编辑:按照我典型的Raybell魅力,似乎我的问题太罗word或误导了。我想道歉。我提供一些背景知识来帮助我了解自己在做什么,而不是误导人们。

我基本上是在寻找关于何时在正则表达式上使用子字符串及其变体的指南,反之亦然。尽管某些答案可能错过了这一点(再次是我的错),但我真的很感谢他们,并相应地投票赞成。

最佳答案

我的主要指导原则是将正则表达式用于一次性代码和用户输入验证。或者,当我试图在大量文本中查找特定模式时。对于大多数其他目的,我将编写语法并实现一个简单的解析器。

一个重要的准则(尽管我经常看到人们经常尝试,这确实很难回避)是在目标语言的语法是递归的情况下始终使用解析器。

例如,考虑使用一种微小的“表达式语言”来评估带括号的算术表达式。用这种语言编写的“程序”示例如下所示:

1 + 2
5 * (10 - 6)
((1 + 1) / (2 + 2)) / 3

语法很容易编写,看起来像这样:
DIGIT := ["0"-"9"]
NUMBER := (DIGIT)+
OPERATOR := ("+" | "-" | "*" | "/" )
EXPRESSION := (NUMBER | GROUP) (OPERATOR EXPRESSION)?
GROUP := "(" EXPRESSION ")"

利用该语法,您可以轻松构建递归下降解析器。

等效的正则表达式实际上很难编写,因为正则表达式通常对递归没有很好的支持。

另一个很好的例子是JSON提取。我见过人们尝试使用正则表达式使用JSON,而这是INSANE。 JSON对象是递归的,因此它们只是在请求常规语法和递归下降解析器。

Hmmmmmmm ...看别人的回答,我想我可能回答了错误的问题。

我将其解释为“何时应使用简单的正则表达式而不是成熟的解析器?”而大多数人似乎将问题解释为“何时应该使用自己的笨拙的逐个字符逐个验证方案,而不是使用正则表达式?”

根据这种解释,我的回答是:永远不会。

好吧...。再编辑一次。

我会稍微宽容自己的计划。只是...不要称其为“解析”:o)

我认为一个好的经验法则是,如果可以使用单个谓词实现所有逻辑,则仅应使用字符串匹配原语。像这样:
if (str.equals("DooWahDiddy")) // No problemo.

if (str.contains("destroy the earth")) // Okay.

if (str.indexOf(";") < str.length / 2) // Not bad.

一旦您的条件包含多个谓词,那么您就开始发明自己的即席字符串验证语言,并且可能应该亲自研究一些正则表达式。
if (str.startsWith("I") && str.endsWith("Widget") &&
(!str.contains("Monkey") || !str.contains("Pox"))) // Madness.

正则表达式确实不难学习。与具有数十种关键字,原始类型和运算符的C#等全功能全功能语言以及具有数千个类的标准库相比,正则表达式绝对简单。大多数正则表达式实现支持大约十二种操作(给定或执行)。

这是一个很好的引用:

http://www.regular-expressions.info/

PS:此外,如果 想了解有关编写自己的解析器(使用lex / yacc,ANTLR,JavaCC或其他类似工具)的知识,那么学习正则表达式是一个很好的准备,因为解析器生成器工具会使用许多相同的原则。

关于regex - 什么时候最好在基本的字符串拆分/子字符串化上使用正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com