2016-11-16 5 views
1

Ich bin neu in Python.Mai kann dies mit Regex getan werden.Ich möchte nach einer bestimmten Teilzeichenfolge in einer Zeichenfolge suchen und entfernen Zeichen vor und nach dem in der Zeichenfolge.Entfernen Sie Zeichen vor und nach bestimmten Unterzeichenfolge in einer Zeichenfolge in Python

Beispiel 1

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

Beispiel 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" 

Ich habe diese Liste der Abkürzungen (MP, TP) in der Zeichenfolge durchsucht werden.

+1

auf der Ersatzfunktion des regex Modul einen Blick darauf werfen, [re.sub] (https: // docs .python.org/3.5/library/re.html # re) – Olian04

+0

alles vor und nach TP. Es kann sowohl Zahlen als auch Zeichen enthalten. Dieses Ding 1234578TP43789 sollte in Ausgabe durch TP ersetzt werden. –

Antwort

7

können Sie 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' 

verwenden Was sie tut?

  • \d+ Entspricht einer oder mehreren Ziffern.
  • (TP|MP) Übereinstimmungen TP oder MP. Erfasst es in \1. Wir haben diese aufgenommene Zeichenfolge verwendet, um die gesamte übereinstimmende Zeichenfolge zu ersetzen.

Wenn alle Zeichen vor und nach dem TP/MP erscheinen können wir \S etwas anderes als ein Raum passen können. Zum Beispiel

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

bearbeiten

Mit list comprehension, können Sie durch die Liste durchlaufen und ersetzen Sie alle Saiten wie

>>> 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 viel Eine weitere Sache list_1 = [ "TP", "MP", "DCT"] list_2 = [ "Das ist die Sendung nicht 1234578TP43789", "Sendung kein 1234578TP43789 auf Fahrzeug ist auf dem Weg no 3456MP567890 "] Jetzt muss ich TP, MP von list_1 suchen es in Strings von list_2 und ersetzen sie.Wie das tun? –

+0

@SalmanBaqri Sie können die Regex erzeugen, indem Sie 'join' als' | '.join (["TP", "MP", "DCT"]) 'verwenden und sie verwenden, um die' list_2' zu iterieren, um die erforderliche Ausgabe zu erzeugen . Sie können auch [list comprehensions] (https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions) verwenden. – nu11p01n73R

+0

Könnte es bitte ein bisschen mehr erklären? –

0

Sie können strip verwenden, die Zeichen aus der Zeit vor Streifen und nach ein Faden.

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 

Um nur zu Streifen, wenn ein reserviertes Wort, um es in einer Schleife gelegt enthalten ist

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 
Verwandte Themen