使用积极的前瞻或后视的增强赋值操作的正则表达式

Regex for augmented assignment operation using positive look-ahead or look-behind

我使用了以下正则表达式来搜索和匹配扩充赋值运算符:

AUG_ASSIGN = r'\+=|\-=|\*=|@=|/=|%=|/@=|&=|\|=|\^=|\<\<=|\>\>=|\*\*=|//='

我有一种预感,可以使用积极的前瞻或积极的回顾来消除多次出现的“=”。所以,我的第一个搜索是 Python 参考手册中的语法部分。即使在那里,“=”也会出现多次:

augop:           "+=" | "-=" | "*=" | "/=" | "%=" | "**="
               | ">>=" | "<<=" | "&=" | "^=" | "|="

可以理解,因为标准 BNF 不包括正向前看或向后看。

接下来,我仔细阅读了 SO 本身给出的建议,因为我输入了这个问题,但我的搜索并没有让我接近我预定的会面点。是否可以将表达式缩小为:

AUG_ASSIGN = <set of all binary operators>(?=\=)

把单个字符放在一个字符集中,和其他有两个相同字符的选项交替,这样你也可以把它们放在一个字符集中(在一个组内,这样可以匹配相同的字符再次使用反向引用)。将以上所有内容放在一个组中,并以 =:

结尾
(?:[+\-*@&/%^|^]|([*/><]))=

https://regex101.com/r/JA84zS/4

不需要环顾四周。