Замените `'<'` как начальный и `'>'` как конечные фразы в строке с требуемым значением - PullRequest
0 голосов
/ 28 ноября 2018

Скажем, у меня есть простая строка Python:

s='Hello I am <name>, and i love to eat <food>'

Итак, я хочу удалить эти фразы в стиле '<name>' и '<food>' с требуемым значением.

Так же яиметь tuple:

r=('Jon Doe', 'Pizza')

Поэтому я хочу заменить эти фразы на значения r по порядку.

Итак, желаемый результат:

'Hello I am Jon Doe and i love to eat Pizza'

Ответы [ 5 ]

0 голосов
/ 28 ноября 2018

Другой способ

>>> import re
>>> r = {'name': 'Jon Doe', 'food': 'Pizza'}
>>> s = 'Hello I am <name>, and i love to eat <food>'
>>> re.sub('<(\w+)>', lambda match: t[match.groups()[0]], s)
'Hello I am Jon Doe, and i love to eat Pizza'
0 голосов
/ 28 ноября 2018

Исправлена ​​ли эта примерная строка?

s = 'Здравствуйте, я люблю покушать'

Если вы можете написать ее, используя {и} вместо <и>, тогдапростой формат может сделать эту работу.

s = 'Hello I am {name}, and i love to eat {food}'
name, food = ('Jon Doe', 'Pizza')
print  print s.format(name=name, food=food)
0 голосов
/ 28 ноября 2018

Вы можете использовать str.replace для преобразования в форматируемую строку и str.format для ее заполнения:

>>> s = s.replace("<", "{").replace(">", "}")
>>> r=('Jon Doe', 'Pizza')
>>> s.format(name=r[0], food=r[1])
'Hello I am Jon Doe, and i love to eat Pizza'

Использование цикла и замена целых тегов:

>>> for key, value in zip(("name", "food"), r):
...    s = s.replace("<{}>".format(key), value)
... 
>>> s
'Hello I am Jon Doe, and i love to eat Pizza'
0 голосов
/ 28 ноября 2018

Использование replace:

s='Hello I am <name>, and i love to eat <food>'

r = ('John Doe','Pizza')
print(s.replace('<','{').replace('>','}').format(name=r[0],food=r[1]))

Обновлено: мой ответ выше был на 8 минут позже другого такого же ответа.Итак, вот вариант:

s='Hello I am <name>, and i love to eat <food>'

r = ('John Doe','Pizza')
d = {'name':r[0],'food':r[1]}

print(s.replace('<','{').replace('>','}').format(**d))
0 голосов
/ 28 ноября 2018

Первый способ, str.join + str.split:

Так что просто разбейте строку на пробелы, затем итерируйте ее, и если значение итератора начинается с '<' и заканчивается '>' просто сделайте это как %s, тогда вы % с кортежем r.

1.%s:

>>> s=' '.join([i if i[0]!='<' and i[-1]!='>' else '%s' for i in s.split()])
>>> s%r
'Hello I am Jon Doe and i love to eat Pizza'
>>> 

2.str.format:

>>> s=' '.join([i if i[0]!='<' and i[-1]!='>' else '{}' for i in s.split()])
>>> s.format(*r)
'Hello I am Jon Doe and i love to eat Pizza'
>>> 
...