我试图找到匹配的括号,中间还有一些更多。我有以下正则表达式,它匹配括号以找到与之关联的那个。我现在需要的是它还搜索前缀,例如" Test"。然而,它会重复整个模式。我不能简单地包括"测试"在模式的开头。我也只希望它在前缀以" Test"开头时匹配。并且不只是匹配任何括号。
我想替换"测试(...)"与其他东西相比,如果它是一种模式,那么它更可取,所以我可以使用regex.sub()
。
import regex
# want to match 'Test(' prefix specifically
regex.search('\(([^()]|(?R))*\)', '... () ... Test(123, Test(123, (3), 3))')
答案 0 :(得分:0)
当您需要使用subroutines时就是这种情况。在这里,您需要将递归模式包含在捕获组中,然后使用(?1)
构造来递归它:
import regex
m = regex.search(r'Test(\((?:[^()]++|(?1))*\))', 'Test(123, Test(123, (3), 3))')
if m:
print(m.group()) # => Test(123, Test(123, (3), 3))
请参阅Python demo。
<强>详情
Test
- 前缀词(\((?:[^()]++|(?1))*\))
- 捕获第1组(将使用(?1)
递归):
\(
- (
字符(?:[^()]++|(?1))*
- 零或更多的
[^()]++
- 除了(
和)
之外的1个字符(为提高效率而占有匹配)|
- 或(?1)
- 一个递归捕获组#1子模式的子程序\)
- )
字符。