我正在尝试找到匹配的括号,中间还有一些。我有以下正则表达式可以做到这一点,它与括号匹配以查找与之关联的正则表达式。我现在需要的是它还搜索前缀,例如"测试"。但是,它会递归整个模式。我不能简单地在模式的开头包含"测试"。我也只希望它在前缀以"Test"开头时匹配,而不仅仅是匹配任何括号。
我想用其他东西替换"Test( ... (",所以最好是一种模式,这样我就可以使用regex.sub()
.
import regex
# want to match 'Test(' prefix specifically
regex.search('(([^()]|(?R))*)', '... () ... Test(123, Test(123, (3), 3))')
当您需要使用子例程时,就是这种情况。在这里,您需要将递归模式包含在捕获组中,然后使用(?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 演示。
详
Test
- 前缀词(((?:[^()]++|(?1))*))
- 捕获组 1(将使用(?1)
递归(:(
-(
炭(?:[^()]++|(?1))*
- 零个或多个重复[^()]++
- 除(
和)
以外的1+字符(所有格匹配以提高效率(|
- 或(?1)
- 递归的子例程 捕获组 #1 子模式
)
- 一个)
字符。