Регулярное выражение для расширенной операции присваивания с использованием положительного прогнозирования или прогнозирования
Я использовал следующее регулярное выражение для поиска и сопоставления расширенных операторов присваивания:
AUG_ASSIGN = r'\+=|\-=|\*=|@=|/=|%=|/@=|&=|\|=|\^=|\<\<=|\>\>=|\*\*=|//='
У меня есть догадка, что можно устранить многократные вхождения '=', используя положительный прогноз или позитивный прогноз. Итак, мой первый поиск был разделом грамматики в справочном руководстве по Python. Даже там '=' встречается несколько раз:
augop: "+=" | "-=" | "*=" | "/=" | "%=" | "**="
| ">>=" | "<<=" | "&=" | "^=" | "|="
Понятно, что стандартный BNF не включает в себя позитивный прогноз или прогноз.
Затем я просмотрел предложения, данные самой SO, когда набирал этот вопрос, и мои поиски не приблизили меня к месту предполагаемой встречи. Можно ли сжать выражение до чего-то вроде:
AUG_ASSIGN = <set of all binary operators>(?=\=)
1 ответ
Поместите отдельные символы в набор символов и чередуйте их с другими опциями, в которых есть два одинаковых символа, так что вы также можете поместить их в набор символов (внутри группы, чтобы один и тот же символ мог снова сопоставляться с обратной ссылкой), Поместите все вышеперечисленное в группу и завершите =
:
(?:[+\-*@&/%^|^]|([*/><])\1)=
https://regex101.com/r/JA84zS/4
Нет необходимости искать обходной путь.