#python #regex
#python #регулярное выражение
Вопрос:
Я почти уверен, что мой вопрос очень прост, но я не могу найти на него ответ. Допустим, у нас есть входная строка типа:
input = "This is an example"
Теперь я хочу просто заменить каждое слово — вообще говоря, каждую подстроку, используя регулярное выражение, «word» здесь просто пример — во входных данных другой строкой, которая также включает исходную строку. Например, я хочу добавить @
слева и справа от каждого слова во входных данных. И результат будет:
output = "@This@ @is@ @an@ @example@"
Каково решение? Я знаю, как использовать re.sub
или replace
, но я не знаю, как я могу использовать их таким образом, чтобы я мог обновлять исходные совпадающие строки, а не полностью заменять их чем-то другим.
Комментарии:
1. не могли бы вы сделать что-нибудь вроде
" ".join(["@" x "@" for x in input.split(" ")])
2. @Hippolippo Не уверен, что это сработает, если я хочу использовать регулярные выражения.
Ответ №1:
Для этого вы можете использовать группы захвата.
import re
input = "This is an example"
output = re.sub("(w )", "@\1@", input)
Группа захвата — это то, на что вы можете позже ссылаться, например, в строке подстановки. В этом случае я сопоставляю слово, помещаю его в группу захвата, а затем заменяю его тем же словом, но с @
добавлением в качестве префикса и суффикса.
Подробнее о регулярных выражениях в python вы можете прочитать в документах.
Ответ №2:
Вот вариант, использующий re.sub
с поисковыми решениями:
input = "This is an example"
output = re.sub(r'(?<!w)(?=w)|(?<=w)(?!w)', '@', input)
print(output)
@This@ @is@ @an@ @example@
Ответ №3:
Это без библиотеки re
a = "This is an example"
l=[]
for i in a.split(" "):
l.append('@' i '@')
print(" ".join(l))
Ответ №4:
Вы можете сопоставлять только границы слов с b
:
import re
input = "This is an example"
output = re.sub(r'b', '@', input)
print(output)
@This@ @is@ @an@ @example@