Я хочу заменить несколько строк пробелами в одной функции замены

#python #scrapy

#python #scrapy

Вопрос:

Я хочу заменить строку на пробел. Для приведенного ниже сценария это работает, но когда у меня есть несколько строк с разными строками, чтобы заменить их пробелами, я застреваю.

например: (я получаю список строк, используя xpath etxtract, для этого предположим, что 8 строк одинаковы, 3 строки одинаковы, 2 строки одинаковы, ……)

 links = [ 'ABCDEFGH google', 'ABCDEFGH google', 'Samsung mobile',  
'ABCDEFGH serachgoogle google', 'ABCDEFGH google',  'XYZacbxf 
12153131' , 'Samsung mobile', 'Apple smartphone x10',.............]

m = []
for link in links:
    temp = link.replace("ABCD", '')
    m.append(temp)
  

(В приведенном выше примере сначала я заменяю ‘ABCD’ на пустой, а затем я хочу заменить ‘ABCD’ на пустой, в-третьих, я хочу заменить «mobile» на пустой, до 20 строк разницы с пробелами в одной функции replce)
(Я не знаю, возможно это или нет!, У кого-то есть идея по этому поводу, пожалуйста, помогите.)
(Заранее спасибо!)

Пробовали =>

 m = []
for link in links:
    temp = link.replace("ABCD", '' or "mobile", '' or "google", 
'' or ...........upto available replacing string) 
    m.append(temp)
  

Комментарии:

1. Каким должен быть ваш конечный результат?

2. вывод будет строкой без замены строк…

Ответ №1:

Вы должны использовать регулярное выражение, которое будет соответствовать всем терминам, которые вы хотите заменить:

 import re

links = ['ABCDEFGH google', 'ABCDEFGH google', 'Samsung mobile',  
'ABCDEFGH serachgoogle google', 'ABCDEFGH google',  'XYZacbxf',
'12153131' , 'Samsung mobile', 'Apple smartphone x10']

to_replace = ['ABCD', 'mobile', 'google']
regex = re.compile('|'.join(to_replace))

new_links = [re.sub(regex, '', link) for link in links]
print(new_links)
  

Вывод:

 ['EFGH ', 'EFGH ', 'Samsung ', 'EFGH serach ', 'EFGH ', 'XYZacbxf', '12153131', 'Samsung ', 'Apple smartphone x10']
  

Ответ №2:

Вы могли бы сделать это таким образом, также выполнив итерацию по строкам для замены:

 to_replace_terms = ['ABCD', 'mobile', 'google']
m = []
for link in links:
    for to_replace_term in to_replace_terms:
        link = link.replace(to_replace_term, '')
    m.append(link)
  

Обратите внимание, что вам нужно назначить замену обратно link , поскольку может произойти несколько замен.

Ответ №3:

Без использования дополнительного списка вы можете использовать регулярное выражение для замены ненужных строк из каждого элемента списка.

Регулярное выражение выглядит как:

 re.sub(r'ABCD|mobile', '', x)
  

Код:

 import re

links = [ 'ABCDEFGH google', 'ABCDEFGH google', 'Samsung mobile',  'ABCDEFGH serachgoogle google', 'ABCDEFGH google',  'XYZacbxf 12153131' , 'Samsung mobile', 'Apple smartphone x10']

res = []
for x in links:
    res.append(re.sub(r'ABCD|mobile', '', x))

print(res)
# ['EFGH google', 'EFGH google', 'Samsung ', 'EFGH serachgoogle google', 'EFGH google', 'XYZacbxf 12153131', 'Samsung ', 'Apple smartphone x10']