Что вам нужно сделать, так это преобразовать lookbehinds в группы захвата, чтобы включить их в строку замены (обратите внимание, что установлен регистрозависимый флаг (i
)):
(@[a-z]+,)([\t ]*([a-z]+)[\t ]*(?=\[[a-z]+\])|[\t ]+)
Заменить на [ 112], если вы хотите удалить эти пробелы.
См. живое демо здесь
.
Вы используете self.attribute
ссылаться на атрибут Вашего текущего экземпляра.
Вы используете wx.Frame.__init__()
ссылаться на метод родительского класса.
Вы не используете self
если Вы только ссылаетесь на локальное имя (переменная) метода (функция), Вы находитесь в.
Это не "эмпирические правила", потому что нет никаких исключений.
Что, вероятно, путает, Вы в этом конкретном примере - то, что панель, кажется, только локальное имя в конструкторе, таким образом, похоже, что панель исчезла бы, после того как Ваш конструктор возвращается.
Если Вы смотрите на документацию к wx.Panel
, Тем не менее, Вы будете видеть, что его конструктор присоединяет панель к родительскому окну, таким образом, это продолжит существовать, даже после того, как конструктор возвращается.
Волшебство :)
В тех экземплярах, если Вы не используете self
затем Вы создадите только локальную переменную того имени. В первом примере, panel
создан как локальная переменная и затем сослан позже в функции, но это не будет доступно вне той функции. Действие передачи self
к wx. Конструктор панели связал его с текущим объектом некоторым способом, таким образом, это только исчезает, когда функция возвращается.
сам всегда требуется при обращении к самому экземпляру, кроме тех случаев, когда, вызывая конструктора базового класса (wx. Кадр. __ init __). Все другие переменные, которые Вы видите в примерах (панель, basicLabel, basicText...) являются просто локальными переменными - не связанный с текущим объектом вообще. Эти имена закончатся, когда метод возвратится - все посаженное в self.foo переживет конец метода и будет доступно в следующем методе (например, self.button).