我有一系列的正则表达式模式,它们被分组到类别中。我试图静态地将它们编译成交替,但我不希望丢失任何特殊的含义。
例如,我通过名称识别Raspberry Pi GPIO引脚。有GPIO引脚,0-27(巧合的是与BCP命名相同的数字),电压参考引脚和命名功能引脚。根据特定的物理引脚福尔斯哪个类别,可以做出假设;例如,电压基准引脚从不具有上拉状态,也不具有GPIO/BCM编号。
于是:
_cats = {
'data': (
r'gpio\.?([0-9]|[1-3][0-9]|40)',
),
'vref': (
r'v3_3',
r'v5'
r'gnd',
),
'named': (
r'SDA\.?([01])',
r'CE\.?0'
r'CE\.?1',
),
}
字符串
我想做的第一件事是将所有的模式组合成一个单独的编译的交替,这样我就可以检查输入是否实际上 * 匹配 * 我的任何键。对于第一个dict中的单个字符串,我可以简单地用途:
crx = rx.compile(('\A' + _cats['data'][0] + '\Z'), rx.IGNORECASE)
型
对于所有这些,我可以这样做:
crx = re.compile('|'.join([('\A' + rx + '\Z') for rx in _cats['vref']]), re.IGNORECASE)
型
但这让我有点困惑每个正则表达式项都应该是^$
或\A\Z
有界的,但是将它们连接成交替,然后编译它们给了我一些问题。
我正在寻找类似Emacs的regexp-opt
函数的东西。
我已经尝试了所描述主题的变体,并得到了语法错误,不匹配任何内容的模式,以及匹配太多的模式。
1条答案
按热度按时间xwbd5t1u1#
我相信你可以用regex
named groups
实现所有的要求。语法为(?P<NAME>EXPRESSION)
。字符串