Regex для расширенной операции присваивания с использованием положительного прогнозирования или прогнозирования - PullRequest
0 голосов
/ 19 октября 2018

Я использовал следующее регулярное выражение для поиска и сопоставления расширенных операторов присваивания:

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

У меня есть догадка, что можно исключить множественные вхождения '=', используя положительный прогноз илипозитивный взгляд.Итак, мой первый поиск был разделом грамматики в справочном руководстве по Python.Даже там '=' встречается несколько раз:

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

Понятно, так как стандартный BNF не включает в себя позитивный прогноз или прогноз.

Далее я рассмотрел предложениязаданный самим SO, когда я набирал этот вопрос, и мои поиски не приблизили меня к месту предполагаемой встречи.Можно ли сжать выражение до чего-то вроде:

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

1 Ответ

0 голосов
/ 19 октября 2018

Поместите отдельные символы в набор символов и чередуйте их с другими опциями, в которых есть два одинаковых символа, так что вы также можете поместить их в набор символов (внутри группы, чтобы один и тот же символ снова мог быть сопоставлен собратная ссылка).Поместите все вышеперечисленное в группу и завершите словами =:

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

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

Не нужно искать обходных путей.

...