Как я могу сделать множественную замену в Python? - PullRequest
5 голосов
/ 12 апреля 2010

В ответ на вопрос и ответ на вопрос мне нужно заменить '[' на '[[]', а ']' на '[]]'.

Я попытался использовать s.replace (), но поскольку он не изменился, я запустил следующее, чтобы получить неправильный ответ.

path1 = "/Users/smcho/Desktop/bracket/[10,20]"
path2 = path1.replace('[','[[]')
path3 = path2.replace(']','[]]')
pathName = os.path.join(path3, "*.txt")
print pathName
-->
/Users/smcho/Desktop/bracket/[[[]]10,20[]]/*.txt
  • Как мне сделать множественную замену в python?
  • Или как я могу заменить '[' и ']' одновременно?

Ответы [ 5 ]

12 голосов
/ 12 апреля 2010
import re
path2 = re.sub(r'(\[|])', r'[\1]', path)

Пояснение:

\[|] будет соответствовать скобке (открытие или закрытие). Поместив его в скобки, вы попадете в группу. Затем в строке замены \1 будет заменено содержимым группы.

3 голосов
/ 12 апреля 2010

Я бы использовал код как

path = "/Users/smcho/Desktop/bracket/[10,20]"
replacements = {"[": "[[]", "]": "[]]"}
new_path = "".join(replacements.get(c, c) for c in path)
1 голос
/ 09 мая 2012

Существует также этот универсальный рецепт множественной замены Python: Однократная многократная замена

0 голосов
/ 12 апреля 2010

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

, то есть

path1 = "/Users/smcho/Desktop/bracket/[10,20]"
path1 = path1.replace('[','*UNIQUE*')
path1 = path1.replace(']','[]]')
path1 = path1.replace('*UNIQUE*','[[]')

pathName = os.path.join(path1, "*.txt")
0 голосов
/ 12 апреля 2010
import re
path2 = re.sub(r'(\[|\])', r'[\1]', path1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...