反正则表达式处理以生成正则表达式

时间:2020-06-05 00:52:48

标签: regex

我们使用常规的 regex处理器,并传递输入文本 regex短语以捕获所需的输出文本

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

我们是否可以逆转同时接收输入文本输出文本的处理,以生成足够的 regex短语,特别是如果文本尺寸限制为实际最小几十个字符?在这方面有可用的工具吗?

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

1 个答案:

答案 0 :(得分:2)

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

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

请注意,您的概括有许多假设,例如,法语,瑞典语或汉语中的单词不应匹配。并且不包含包含,.的数字。

您不能指望采用通用算法来进行这种区分,因为这些本质上是需要通用AI的问题,需要抽象地理解问题域并提出合适的解决方案。

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

但是,在这里可以找到一些更乐观的观点:Is it possible for a computer to "learn" a regular expression by user-provided examples?