Python 从正则表达式浏览和提取字符类
所以问题有点相反:我有一个正则表达式,希望从中提取可能性。我还没有字符串,我只是想知道什么匹配。例如:Python 从正则表达式浏览和提取字符类,python,regex,Python,Regex,所以问题有点相反:我有一个正则表达式,希望从中提取可能性。我还没有字符串,我只是想知道什么匹配。例如: import re license = re.compile("^[0-9]{3}[A-Z][0-9]{3}$") 我知道当使用re.DEBUG时,字符类的列表是按顺序显示的。还显示了静态字符。这正是我想要得到的,一个表示正则表达式“部分”的对象列表。第一个表示字符串的开头,第二个表示一个字符类,包括0到9,并重复三次,依此类推 使用正则表达式可以吗?我知道应该是相反的 谢谢你的帮助,这非常
import re
license = re.compile("^[0-9]{3}[A-Z][0-9]{3}$")
我知道当使用re.DEBUG时,字符类的列表是按顺序显示的。还显示了静态字符。这正是我想要得到的,一个表示正则表达式“部分”的对象列表。第一个表示字符串的开头,第二个表示一个字符类,包括0到9,并重复三次,依此类推
使用正则表达式可以吗?我知道应该是相反的
谢谢你的帮助,这非常有帮助,谢谢。所以,如果有人需要它,我会把我找到的贴出来。实现这一点的方法是探索正则表达式。这不是直截了当的,它需要一些额外的编码,但是如果您的用例很简单(像我的),您就不必太担心分支或其他高级特性
>>> re.sre_parse.parse("^[0-9]{3}[A-Z][0-9]{3}$").data
[('at', 'at_beginning'), ('max_repeat', (3, 3, [('in', [('range', (48, 57))])])), ('in', [('range', (65, 90))]), ('max_repeat', (3, 3, [('in', [('range', (48, 57))])])), ('at', 'at_end')]
>>>
所以我们这里有这些信息,我们只需要尽可能整洁地处理它们。一些第三方库允许使用基本正则表达式随机生成,但这在Python(可能是非常旧的版本)中是现成的。请看,我主要使用
itertools.product
和一些手工制作的零件列表来实现这一点。谢谢@WiktorStribiżew的链接,非常有用。