gpt4 book ai didi

python - 是否需要一种更具声明性的方式来表达正则表达式? :)

转载 作者:太空狗 更新时间:2023-10-29 17:30:33 25 4
gpt4 key购买 nike

我正在尝试创建一个 Python 函数,它可以接受正则表达式的简单英语描述并将正则表达式返回给调用者。

目前我正在考虑 YAML 格式的描述。因此,我们可以将描述存储为原始字符串变量,该变量传递给另一个函数,然后该函数的输出传递给“re”模块。下面是一个相当简单的例子:

# a(b|c)d+e*
re1 = """
- literal: 'a'
- one_of: 'b,c'
- one_or_more_of: 'd'
- zero_or_more_of: 'e'
"""
myre = re.compile(getRegex(re1))
myre.search(...)

等等

有没有人认为这类东西会有更广泛的用途?你知道现有的软件包可以做到吗?您认为这种方法有哪些局限性?有人认为,在代码中包含声明性字符串会使它更易于维护吗?

最佳答案

这实际上与词法分析器/解析器的工作方式非常相似(相同?)。如果您有定义的语法,那么您可能可以轻松地编写一个解析器。例如,你可以这样写:

<expression> :: == <rule> | <rule> <expression> | <rule> " followed by " <expression>
<rule> :: == <val> | <qty> <val>
<qty> :: == "literal" | "one" | "one of" | "one or more of" | "zero or more of"
<val> :: == "a" | "b" | "c" | "d" | ... | "Z" |

这远不是一个完美的描述。有关更多信息,请查看 this BNF of the regex language .然后你可以看看 lexingparsing表达式。

如果你这样做,你可能会更接近 Natural Language/正则表达式的英文版本。


我可以看到像这样的工具很有用,但如前所述,主要针对初学者。这种方法的主要限制在于将语言翻译成正则表达式(和/或反之亦然)所必须编写的代码量。另一方面,我认为双向翻译工具实际上会更理想并且会得到更多使用。能够采用正则表达式并将其转换为英语可能更有助于发现错误。

当然,学习正则表达式不会花太长时间,因为语法通常很简洁,而且大部分含义都非常不言自明,至少如果您使用 |或||作为您的语言中的 OR,并且您认为 * 是乘以 0-N,+ 是加 0-N。

虽然有时我不介意输入“找到一个或多个'a'后跟三个数字或'b'然后'c'”

关于python - 是否需要一种更具声明性的方式来表达正则表达式? :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439471/

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