Обновление строки с использованием регулярных выражений в Python

#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@