如何使用AI帮助开发者处理正则表达式

不知你是否听说过由人工智能(AI)来生成正则表达式(Regex)。这是一个有趣的领域,鉴于人工智能在文本分析方面优异的表现,它们足以开始“整理”各种现有表达式工具了。

作为开发人员,我们可能更希望将人工智能作为开发系统的一部分,从日常自己的工作流中提取信息,生成表达式,而不是停留在被动地接受由OpenAI等公司提供的所谓以用户为中心的平台方案的层面上。下面,我将从正则表达式的生成原理说起,向你介绍两款可供免费使用的此类工具。

表达式生成原理

让我们从一个简单的伦敦旅行问题开始:“请问,从Walthamstow到Pimlico的最佳旅行方式是什么?”对此,ChatGPT能够轻松地从该问句中提取起点和终点,并给出如下图所示的答复:

该问题并不难回答。如果你愿意,还可以通过一问一答的方式,获取更多的最新信息。上述问例的核心在于,算法准确地捕捉了“从(from)”和“到(to)”之间的文本,进而可以生产一个如下简单的正则表达式案例,即:

复制

/from ([A-Z][a-z]*) to ([A-Z][a-z]*)/
  • 1.

如下图所示,通过访问www.regex101.com,我们可以看到其详细的过程:

从下面整理的信息中,我们可以看出,两个“捕获组(capture group)”都成功捕捉到了起点和终点信息:

因此,假设我们需要获取一个与上面类似的正则表达式,便可以借助人工智能工具来实现。总体而言,我们需要人工智能能够做到:

  1. 主要目的是能够生成正确的正则表达式,然后将其应用到自己的程序代码中。
  2. 利用人工智能的优势,理解句子中的情感表达,并通过起点和终点等关键字,来确认正在寻找的方向。
  3. 用户可以在处理代码的同时,快速领悟正则表达式的语法。
  4. 根据人工智能给出的多种不同的正则表达式方式,针对实际问题,选取最优解。
Regex.ai

如果你持续关注正则表达式领域的话,也许会和我一样,首先想到的是Regex.ai网站。该网站的使用方式既有趣又简单:你只需创建一个短语,并加入需要被提取的单词,那么该网站就会生成各种候选的正则表达式。让我们以上述旅行为例往下看:

如你所见,网站上的人工智能已按要求提取了起点和终点。

在此基础上,我按下“运行(run)”按钮,等待几秒钟后,便得到以下信息:

在上面的截图中,你可以看到有四个不同的代理进行了四次不同的尝试。其正则表达式位于每一列的上方,对应的结果位于下方。如你所见,只有一列提取到了正确的回复(即:代理B的两组捕获是正确的)。接着,在我点击代理B的结果后,将会出现如下内容:

由上面的截图可知,人工智能确实已正确地理解了问句的意思(尽管它可能还没有完全理解提问者强调的是起点和终点)。

从技术上讲,由于它使用了单词边界(如:开头的\b)和空白匹配器(\s),而不仅仅是空格,因此其结果比较清晰可读。同时,考虑到真实地名单词可能存在不仅仅出现首字母为大写的情况,因此相较于[A-Z][a-z]+,它使用了更为合理的[A-Z][a-z]*。

RegExGPT.app

与Regex.ai不同,网站RegExGPT.app并不会去捕获各种词组,而且采取如下图所示的另一种方法:

通过在指定的问题区域内,使用英语来询问提问者希望提供什么,该网站会给出创意性的组合。不仅如此,它还为我们提供了一套可行的正则表达式代码段,而且其效果还不错:

如上图所示,首先,为了理解上下文,它会将输出函数命名为“extractRoute”。

接着,它会对所提供的正则表达式进行全面解释(请参阅下图):

而且,它甚至还会给出一个如何在JavaScript中使用的示例:

虽然上述正则表达式本身有些复杂,但是它能够完整地解释其推理过程。其中,括号用于捕获,且被正则表达式赋予了优先权,而(?: ) 在此表示为非捕获组(non-capturing group)。非捕获组可用于完成前者“from”的捕获,而无需为后者“to”产生开销。

总的说来,虽然表达式(\w+(?:\s\w+)*)看起来比较复杂,但是其作用足以捕捉到包含了多个关键字(multi-word)的表达式,且不会弄错捕捉组。如下图所示,假设我们必须从Green Park出发,而不是从Walthamstow出发:

显然,地名Green Park中的空格并没有造成任何问题,而其他生成工具则不然。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c++服务器开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值