我正在尝试找到匹配的括号,其中还有一些在中间 . 我有以下正则表达式,它匹配括号以找到与之关联的那个 . 我现在需要的是它还搜索前缀,例如“Test” . 然而,它会重复整个模式 . 我不能简单地在模式的开头包含“测试” . 我还只希望它在前缀以“Test”开头时匹配,而不仅仅匹配任何括号 .
我想用其他东西替换"Test( ... )",所以最好是它是一个模式,所以我可以使用 regex.sub()
.
import regex
# want to match 'Test(' prefix specifically
regex.search('\(([^()]|(?R))*\)', '... () ... Test(123, Test(123, (3), 3))')
1 回答
当你需要使用subroutines时就是这种情况 . 在这里,您需要将递归模式包含在捕获组中,然后使用
(?1)
构造来递归它:见Python demo .
Details
Test
- 前缀词(\((?:[^()]++|(?1))*\))
- 捕获组1(将使用(?1)
递归):\(
- 一个(
char(?:[^()]++|(?1))*
- 零或更多的[^()]++
- 除了(
和)
之外的1个字符(占有率匹配以提高效率)|
- 或(?1)
- 一个递归捕获组#1子模式的子程序\)
- 一个)
char .