仅当以下字符串与模式匹配时才匹配

NOT*_*NOT 4 python regex regex-lookarounds

我试图匹配以某个字符串开头的整个字符串,然后匹配任意数量的字符::,除非::匹配,否则仅接受 if 后跟该字符串CASE

例如:以 开头,后跟Linus::0 个或多个 1 字符的字符串,除非 if ::thenCASE必须跟在 else 后面,仅匹配 之前的所有内容::

Linus::AOPKNS::CASE将捕获整个字符串

Linus::AOPKNS将捕获整个字符串

Linus::AOPKNS::OK只会捕获Linus::AOPKNS

我想我必须使用积极的前瞻,但考虑到我想匹配 之前的任意数量的字符,我不太确定该怎么做::

InS*_*ync 6

使用经过调和的贪婪令牌

^                  # Match at the start of the string
Linus::            # 'Linus::', literally,
(?:(?!::).)+       # followed by a sequence of characters that doesn't contain '::'
(?:::CASE)?        # and, optionally, '::CASE'.
Run Code Online (Sandbox Code Playgroud)

在 regex101.com 上尝试一下。

根据您的用例,您可能需要在模式末尾添加(字边界)。\b