re.search(r'(?<=\b)(\d{8})(?=_\w+)(?:[^\w\n]+\w+){0,5}?[^\w\n]+(prev|previous)\b',
'this 12345678_offer was one of previous'
)
但是,如果我将前瞻断言更改为不匹配组,它会找到它:
re.search(r'(?<=\b)(\d{8})(?:_\w+)(?:[^\w\n]+\w+){0,5}?[^\w\n]+(prev|previous)\b',
'this 12345678_offer was one of previous'
).groups()
我有两个问题:
谢谢。
先行断言不起作用,因为它不消耗字符,因此正则表达式引擎不会越过它检查的下划线和单词。然而,非捕获组确实会消耗字符,从而允许正则表达式继续匹配模式的其余部分。使用前瞻检查条件而不影响正则表达式位置,并在需要在序列中包含模式但不捕获它以供进一步使用时使用非捕获组。