首页 > 解决方案 > 逆正则表达式处理以生成正则表达式短语

问题描述

我们采用普通的正则表达式处理器并传递输入文本正则表达式短语来捕获所需的输出文本

output = the_normal_regex(
         input = "12$abc@#EF345", 
         phase = "\d+|[a-zA-Z]+") 
       = ["12", "abc", "EF", "345"]

我们是否可以反转接收输入文本输出文本的处理以产生适当的正则表达式短语,特别是如果文本大小限制在实际最小值,例如几十个字符?在这方面有什么可用的工具吗?

phrase = the_inverse_tool(
         input = "12$abc@#EF345", 
         output=["12", "abc", "EF", "345"]) 
       = "\d+|[a-zA-Z]+"

标签: regex

解决方案


您要问的似乎是是否有某种算法或现有库接受输入字符串(如"12$abc@#EF345")和一组匹配项(如["12", "abc", "EF", "345"])并在给定输入字符串的情况下生成一个“足够”的正则表达式来产生匹配项。

但是,在这种情况下,“足够”是什么意思?对于您的示例,一个简单的答案是:"12|abc|EF|345". 但是,您似乎期望更像是广义的"\d+|[a-zA-Z]+"

请注意,您的概括做了许多假设,例如法语、瑞典语或中文中的单词不应该匹配。包含,or.的数字也不包括在内。

你不能指望一个通用算法来做出这些区分,因为这些本质上是需要通用 AI 的问题,在抽象级别上理解问题域并提出合适的解决方案。

另一种看待它的方式是:您的问题与询问是否有一些函数或库可以自动化程序员的工作(特定于正则表达式语言)相同。答案是:不,无论如何还没有,到那时,StackOverflow 上不会有人问或回答这些问题,因为我们都会失业。

但是,可以在这里找到一些更乐观的观点:计算机是否可以通过用户提供的示例“学习”正则表达式?


推荐阅读