конкретный поиск в питоне? - PullRequest
0 голосов
/ 06 января 2011

Есть ли способ искать и заменять определенные строки, но также следить за похожими строками, а не заменять их?

например, если у меня есть

self.a
self.b
self.c
self.d
self.e
self.f
self.g

и я хотел

self.a
self.__b
self.c
self.__d
self.__e
self.f
self.g

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

Ответы [ 4 ]

3 голосов
/ 06 января 2011

Регулярные выражения ?

Модуль Python re имеет функцию с именем re.sub, которая заменяет все, что соответствует шаблону, чем-то другим.

Вы также можете использовать регулярные выражения из Perl, awk, sed и т. Д. В зависимости от ваших предпочтений.Просто ищите и заменяйте в зависимости от того, какие шаблоны вы хотите найти и изменить.

1 голос
/ 06 января 2011

Помимо создания другого скрипта для выполнения замены, вы, вероятно, можете сделать это в своем редакторе. Например, если вы используете Vim, наберите следующее, что вам нужно:

:%s/self\.\(b\|d\|e\)/self.__\1/g
1 голос
/ 06 января 2011

Регулярные выражения - ваш друг здесь. Тем не менее, они немного интенсивны для начинающих. Для достижения цели в приведенном выше примере используйте команду python:

import re
pattern = r'(self\.)(b|d|e)\s'
result = re.sub(pattern, '\1__\2', source)

Это берет каждый экземпляр строки, начинающейся с 'self.' сопровождается b, d или e и заменяет его на «self .__», за которым следует правильная строка.

1 голос
/ 06 января 2011

Сделайте резервную копию вашего сценария.Создайте новый скрипт и import re, затем re.sub () ваш оригинальный скрипт.Запустите модульное тестирование сценария regex'd, чтобы убедиться в его функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...