为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

天涯尽头无女友 2023-07-11 17:29:53
假设我有以下字符串,并且我想提取以大写字母开头的所有标识符,除非在引号内找到: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 来检查引号对(因为每个开头引号都有一个结尾引号)。只要要匹配的单词后面有偶数个双引号(即成对),我们就知道它本身没有被引号括起来。


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信