Нужно конкретное объяснение части кода регулярного выражения - PullRequest
0 голосов
/ 19 сентября 2018

Я разрабатываю калькуляторную программу на Python, и мне нужно удалить начальные нули из чисел, чтобы вычисления работали, как ожидалось.Например, если пользователь вводит «02 + 03» в калькулятор, результат должен возвращать 5. Чтобы убрать эти начальные нули перед цифрами, я задал здесь вопрос и получил следующий ответ.

self.answer = eval(re.sub(r"((?<=^)|(?<=[^\.\d]))0+(\d+)", r"\1\2", self.equation.get()))

Я полностью понимаю, как работает положительный взгляд за началом строки и взгляд за нецифровым, непериодическим символом.Что меня смущает, так это где в этом коде регулярных выражений я могу найти замену сопоставленным шаблонам?

Я нашел это в Интернете при исследовании выражений регулярных выражений.

result = re.sub(pattern, repl, string, count=0, flags=0)

Где находится "repl "в коде регулярного выражения выше?Если возможно, может кто-нибудь помочь объяснить, для чего и в этом регулярном выражении используется r "\ 1 \ 2"?

Спасибо за вашу помощь!:)

Ответы [ 3 ]

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

Во-первых, repl включает в себя то, что вы собираетесь заменить.

Чтобы понять \ 1 \ 2, вам нужно знать, что такое группировка захвата.
Проверьте это видео, чтобы ознакомиться с основами захвата группы.
Здесь, поскольку ваше регулярное выражение разбивает каждое найденное совпадение на группы по 1,2 ... и так далее.Это так из-за круглых скобок (), которые вы поместили в регулярное выражение.$ 1, $ 2 или \ 1, \ 2 можно использовать для ссылки на них.

В этом случае:
Регулярное выражение заменяет все числа после начального 0 (который перехватываетсяпо группе 2) с собой.
Примечание: \ 1 не обязательно.отлично работает без него.

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

Часть регулярного выражения "repl" - это этот компонент:

r"\1\2"

В части регулярного выражения "find" происходит захват группы (обычно обозначаемый символами "()" вокруг содержимого, хотя это может быть переопределено конкретными аргументами).

В регулярном выражении Python синтаксис, используемый для указания ссылки на захваченную позиционную группу (иногда называемую "обратная ссылка"), равен "\ n" (где "n"это цифра, указывающая на положение группы в части регулярного выражения" find ").

Итак, это регулярное выражение возвращает строку, в которой весь контент заменяется определенно частями вводастрока соответствует нумерованным группам.

Примечание: я не считаю, что часть "\ 1" в "repl" действительно требуется.Я думаю:

r"\2"

... будет работать так же хорошо.

Дальнейшее чтение: https://www.regular -expressions.info / brackets.html

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

См. Пример:

>>> import re
>>> s='awd232frr2cr23'
>>> re.sub('\d',' ',s)
'awd   frr cr  '
>>> 

Объяснение:

  • Как есть, '\d' для целого числа, поэтому удаляет их и заменяет на repl (в данном случае ' ').
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...