2016-11-16 5 views
1

Я новичок в Python. Может быть, это можно сделать с помощью regex.I хочу найти определенную подстроку в строке и удалить символы до и после этого в строка.Удалить символы до и после определенного подстроки в строке в Python

Пример 1

Input:"This is the consignment no 1234578TP43789" 
Output:"This is the consignment no TP" 

Пример 2

Input:"Consignment no 1234578TP43789 is on its way on vehicle no 3456MP567890" 
Output:"Consignment no TP is on its way on vehicle no MP" 

У меня есть список этих сокращений (MP, TP) для поиска в строке.

+1

взгляните на функцию замещающего модуля регулярных выражений, [re.sub] (https: // документы .python.org/3.5/library/re.html # re.sub) – Olian04

+0

ничего до и после TP. Он может содержать числа и символы. Эта вещь 1234578TP43789 должна быть заменена TP на выходе. –

ответ

7

Вы можете использовать re.sub

>>> string="This is the consignment no 1234578TP43789" 
>>> re.sub(r'\d+(TP|MP)\d+', r'\1', string) 
'This is the consignment no TP' 

>>> string="Consignment no 1234578TP43789 is on its way on vehicle no 3456MP567890" 
>>> re.sub(r'\d+(TP|MP)\d+', r'\1', string) 
'Consignment no TP is on its way on vehicle no MP' 

Что он делает?

  • \d+ Соответствует одной или нескольким цифрам.
  • (TP|MP) Соответствует TP или MP. Захватывает его в \1. Мы использовали эту захваченную строку для замены всей согласованной строки.

Если какой-либо персонаж может появиться до и после того, как TP/MP мы можем использовать \S, чтобы соответствовать ничего, кроме пространства. Например,

>>> string="Consignment no 1234578TP43789 is on its way on vehicle no 3456MP567890" 
>>> re.sub(r'\S+(TP|MP)\S+', r'\1', string) 
'Consignment no TP is on its way on vehicle no MP' 

Редактировать

Используя list comprehension, вы можете перемещаться по списку и заменить все строки как,

>>> list_1=["TP","MP","DCT"] 
>>> list_2=["This is the consignment no 1234578TP43789","Consignment no 1234578TP43789 is on its way on vehicle no 3456MP567890"] 
>>> [ re.sub(r'\d+(' + '|'.join(list_1) + ')\d+', r'\1', string) for string in list_2 ] 
['This is the consignment no TP', 'Consignment no TP is on its way on vehicle no MP'] 
+0

@ nu11p01n73RThanks много еще одно list_1 = [ "TP", "МП", "ДКП"] list_2 = [ "Это не партия не 1234578TP43789", "партия не 1234578TP43789 на своем пути на автомобиле no 3456MP567890 "] Теперь мне нужно взять TP, MP из list_1 найти его в строках list_2 и заменить их. Как это сделать? –

+0

@SalmanBaqri Вы можете сгенерировать регулярное выражение, используя 'join' как' '|' .join (["TP", "MP", "DCT"]) 'и использовать его для итерации' list_2' для генерации требуемого вывода , Вы также можете использовать [список понятий] (https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions). – nu11p01n73R

+0

Не могли бы вы объяснить это чуть больше? –

0

Вы можете использовать strip, который лишает символы до и после строка.

strg="Consignment no 1234578TP43789 is on its way on vehicle no 3456MP567890" 
strg=' '.join([word.strip('') for word in strg.split()]) 
print(strg) # Consignment no TP is on its way on vehicle no MP 

Чтобы просто раздеться, если зарезервированное слово содержится положить его в петлю

strg="Consignment no 1234578TP43789 is on its way on vehicle no 3456MP567890 200DG" 
reserved=['MP','TP'] 
for res in reserved: 
    strg=' '.join([word.strip('') if (res in word) else word for word in strg.split()]) 
print(strg) # Consignment no TP is on its way on vehicle no MP 200DG