заменить элемент в строке, если он соответствует элементу в списке - PullRequest
3 голосов
/ 22 февраля 2012

Я пытаюсь удалить слова из строки, если они совпадают со списком.

x = "How I Met Your Mother 7x17 (HDTV-LOL) [VTV] - Mon, 20 Feb 2012"

tags = ['HDTV', 'LOL', 'VTV', 'x264', 'DIMENSION', 'XviD', '720P', 'IMMERSE']

print x

for tag in tags:
    if tag in x:
        print x.replace(tag, '')

Это приводит к выводу:

How I Met Your Mother 7x17 (HDTV-LOL) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (-LOL) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (HDTV-) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (HDTV-LOL) [] - Mon, 20 Feb 2012

Я хочу удалить все слова, соответствующие списку.

Ответы [ 4 ]

12 голосов
/ 22 февраля 2012

Вы не сохраняете результат x.replace(). Вместо этого попробуйте следующее:

for tag in tags:
    x = x.replace(tag, '')
print x

Обратите внимание, что ваш подход соответствует любой подстроке, а не только полному слову. Например, он удалит LOL в RUN LOLA RUN.

Один из способов решения этой проблемы - заключить каждый тег в пару r'\b' строк и найти результирующее регулярное выражение . r'\b' будет соответствовать только границам слов:

for tag in tags:
    x = re.sub(r'\b' + tag + r'\b', '', x)
6 голосов
/ 22 февраля 2012

Метод str.replace() не меняет строку на месте - строки являются неизменяемыми в Python. Вы должны привязать x к новой строке, возвращаемой replace() в каждой итерации:

for tag in tags:
    x = x.replace(tag, "")

Обратите внимание, что оператор if является избыточным; str.replace() ничего не сделает, если не найдет совпадения.

3 голосов
/ 22 февраля 2012

Используя ваши переменные tags и x, вы можете использовать это:

output = reduce(lambda a,b: a.replace(b, ''), tags, x)

возвращается:

'How I Met Your Mother 7x17 (-) [] - Mon, 20 Feb 2012'
1 голос
/ 22 февраля 2012

(1) x.replace(tag, '') не изменяет x, а скорее возвращает новую строку с заменой.

(2) почему вы печатаете на каждой итерации?

Самая простая модификация, которую вы могли бы сделать:

for tag in tags:
     x = x.replace(tag, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...