我有一长串应该测试的正则表达式。我不想一个一个地浏览列表并为每个表达式编写适用的测试 - 如果可能的话 - 我想创建一个生成器函数来考虑正则表达式的类型并生成相关的输入字符串。
例如:
rgx = re.compile(r'^item_(?P<item_number>\d+)$')
是否可以确定正则表达式匹配的输入类型?考虑到上面的例子,是否可以从编译的正则表达式中确定正则表达式需要的输入(如item_23567)?
最佳答案
这个答案很好地抽象地定义了问题: https://stackoverflow.com/a/208112/1092724
Python 解决方案: Reversing a regular expression in Python
Java 库解决方案: http://code.google.com/p/xeger/
这些解决方案并非没有限制:参见 http://code.google.com/p/xeger/wiki/XegerLimitations
摘自 Xeger 限制页面上的评论
"it is worth noting that the current implementation of xeger randomly traverses an fsm to generate its strings. if you have regular expressions with characters to match after a ., transitions are added back to the state for . for every single state afterwards. it becomes increasingly improbable with each state after the .* that xeger will ever reach an accepting state."
(@Highly Irregular)在他们的评论中表达了类似的担忧。
这是您会发现的所有实现中的一个共同主题。这些解决方案仅适用于精心构造的表达式。否则您的代码可能会进行无限的旅程,永远找不到您要找的东西。如果您确实需要定期且明确定义的内容,那么这些方法之一可能适合您。
关于python - 确定任何正则表达式的输入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928119/