我正在尝试制作一个正则表达式,其中我有一些重复的组名,例如,在下面的示例中,我想找到 的值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应该是因为没有解决方案。stringmatchNone
有任何想法吗?
注意:更准确地说,在我的问题中,我有成对的模式/字符串(p_0, s_0) ... (p_n, s_n),我必须在这些对之间找到一个有效的匹配,所以我用分隔符将它们连接在一起__,但我也很好奇是否有合适的方法来做到这一点。