1

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

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

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

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

可以理解,因为标准 BNF 不包括积极的前瞻或后瞻。

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

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

1 回答 1

2

将单个字符放入一个字符集中,并与具有两个相同字符的其他选项交替,这样您也可以将它们放入一个字符集中(在一个组内,以便可以通过反向引用再次匹配相同的字符) . 将以上所有内容放在一个组中,并以=

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

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

无需环顾四周。

于 2018-10-19T06:24:50.100 回答