2017-02-01 4 views
0

Ich habe eine Zeichenfolge wie:Python negativ regex

s = "The code for the product is A8H4DKE3SP93W6J and you can buy it here." 

Der Text in dieser Zeichenfolge wird nicht immer im gleichen Format sein, wird es dynamisch sein, so kann ich nicht ein einfaches Fund tun und ersetzen um den Produktcode zu erhalten.

das sehe ich:

re.sub(r'A[0-9a-zA-Z_]{14} ', '', s) 

Fahrt des Produktcodes bekommen. Wie gehe ich vor, das Gegenteil zu tun, d. H. Den gesamten Text zu löschen, abgesehen vom Produktcode? Der Produktcode wird immer eine 15-stellige Zeichenkette sein, beginnend mit dem Buchstaben A.

Ich habe mein Gehirn und mein Googeln gepackt, um eine Lösung zu finden, aber ich kann es nicht herausfinden.

Dank

+1

[ 're.findall'] (https://docs.python.org/3.1/library/re.html#re.findall) – TemporalWolf

+2

einfach extrahieren, was Sie den Rest der behalten wollen und entsorgen Zeichenfolge. – skrrgwasme

+0

Mögliches Duplikat von [Python regex findall] (http://stackoverflow.com/questions/7752551/python-regex-findall) – fafl

Antwort

1

Statt den Rest der Zeichenfolge zu ersetzen, verwenden re.search() für die Produktnummer zu suchen:

In [1]: import re 

In [2]: s = "The code for the product is A8H4DKE3SP93W6J and you can buy it here." 

In [3]: re.search(r"A[0-9a-zA-Z_]{14}", s).group() 
Out[3]: 'A8H4DKE3SP93W6J' 
+0

Yup, das ist aussortiert, danke !! – badcoder

0

In regex, können Sie Sie auf dem Abschnitt entsprechen, indem zum Ersetzen behalten möchten Verwenden von Klammern um das Muster herum und dann Beziehen auf dieses in dem Untermuster mit einem umgekehrten Schrägstrich gefolgt von dem Index für diesen übereinstimmenden Abschnitt. Im folgenden Code ist "(A [0-9A-Za-z _] {14})" der Abschnitt, den Sie abgleichen möchten, und Sie können den resultierenden String mit "\ 1" ersetzen.

re.sub(r'.*(A[0-9A-Za-z_]{14}).*', r'\1', s)