我正在尝试制作一个正则表达式,其中我有一些重复的组名,例如,在下面的示例中,我想找到 的值ph
,A
这样B
如果我在 中替换它们pattern
,我就会检索string
。我使用 来执行此操作regex
,因为 Python 的默认re
库不允许重复名称。
pattern = '(?P<ph>.*?) __ (?P<A>.*?) __ (?P<B>.*?) __ \( (?P<ph>.*?) \-> (?P<A>.*?) = (?P<B>.*?) \) \)'
string = 'y = N __ ( A ` y ) __ ( A ` N ) __ ( y = N -> ( A ` y ) = ( A ` N ) ) )'
match = regex.fullmatch(pattern, string)
for k, v in match.groupdict().items():
print(f'{k}: {v}')
我检索了预期的输出:
ph: y = N
A: ( A ` y )
B: ( A ` N )
我担心的是,这个库似乎有一些问题,或者我没有正确使用它。例如,如果我替换string
为:
string = 'BLABLA __ ( A ` y ) __ ( A ` N ) __ ( y = N -> ( A ` y ) = ( A ` N ) ) )'
ph
那么上面的代码为,A
和提供了完全相同的值B
,忽略 , 开头的前缀BLABLA
应该是因为没有解决方案。string
match
None
有任何想法吗?
注意:更准确地说,在我的问题中,我有成对的模式/字符串(p_0, s_0) ... (p_n, s_n)
,我必须在这些对之间找到一个有效的匹配,所以我用分隔符将它们连接在一起__
,但我也很好奇是否有合适的方法来做到这一点。