#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']