假设我有以下字符串,并且我想提取以大写字母开头的所有标识符,除非在引号内找到:Match1Match2(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上尝试这一点。
1 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
您可以使用以下模式:
\b[A-Z]\w+(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
技巧是使用正向 Lookahead(与 Lookbehind 不同,它可以具有非固定长度)。因此,我们使用 Lookahead 来检查双引号对(因为每个开头引号都有一个结尾引号)。只要要匹配的单词后面有偶数个双引号(即成对),我们就知道它本身没有被引号括起来。
添加回答
举报
0/150
提交
取消