Нужно конкретное объяснение части кода регулярного выражения

1

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

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

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

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

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

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

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

  • 0
    А почему тег tkinter ?
Теги:
tkinter

3 ответа

1
Лучший ответ

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

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

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

  • 0
    Спасибо вам большое! Теперь имеет больше смысла :)
  • 0
    Просто еще один быстрый вопрос, если все в порядке. Для чего используется r в начале шаблона регулярных выражений?
Показать ещё 1 комментарий
2

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

r"\1\2"

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

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

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

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

r"\2"

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

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

1

См. Пример:

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

Объяснение:

  • Как бы то ни было, '\d' для целых чисел, поэтому удаляет их и заменяет с помощью repl (в этом случае ' ').
  • 1
    Спасибо за вашу помощь! В коде в моем заданном вопросе, что такое ответ? Я не понимаю, что делает r "\ 1 \ 2".
  • 0
    @ Девин, как вы видите, это « '\\1\\2'
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню