如何匹配标识符,除非在引号内找到标识符?

假设我有以下字符串,并且我想提取以大写字母开头的所有标识符,除非在引号内找到:


Match1

Match2(Match3("NoMatch1 a NoMatch2 blabla"), Match4)

meh<Match5>

在这种情况下,Match1、Match2、Match3、Match4和Match5应该被捕获,而NoMatch1和NoMatch2应该被忽略,因为它们位于带引号的字符串内。


我可以使用 JS 正则表达式获得所需的结果。但是我所有将其转换为有效的 Python 正则表达式的尝试都惨败。到目前为止我遇到的错误消息:


( A lookbehind assertion has to be fixed width

* A quantifier inside a lookbehind makes it non-fixed width

) A lookbehind assertion has to be fixed width

* A quantifier inside a lookbehind makes it non-fixed width

我不知道如何解决这个问题。使用 Python 正则表达式可以实现这一点吗?如果是这样,我错过了什么?


注意:我还没有实际的 Python 代码,到目前为止我一直在https://regex101.com上尝试这一点。



天涯尽头无女友
浏览 321回答 1
1回答

子衿沉夜

您可以使用以下模式:\b[A-Z]\w+(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)技巧是使用正向 Lookahead(与 Lookbehind 不同,它可以具有非固定长度)。因此,我们使用 Lookahead 来检查双引号对(因为每个开头引号都有一个结尾引号)。只要要匹配的单词后面有偶数个双引号(即成对),我们就知道它本身没有被引号括起来。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python