2016-07-30 13 views
-1

Ich habe ein paar Strings, die alle mit einigen numerischen Ziffern, unmittelbar vor einer Anzahl von nicht numerischen Zeichen, z. B. , enden. Ich möchte genau diese Gruppe abschneiden; für dieses Beispiel -ch1. Ich habe versucht,Abschließende Gruppe mit Regex trennen

import re 

str0 = '10.1002/0470868279-ch1' 

a = re.match('(.*)([^0-9]+[0-9]*)', str0) 
print(a.group(0)) 
print(a.group(1)) 
print(a.group(2)) 

str1 = '10.1002/0470868279.1' # likewise 

aber das ist nicht ganz:

10.1002/0470868279.ch1 
10.1002/0470868279.c 
h1 

Ich denke, die regex gierig von Anfang an übereinstimmt.

Irgendwelche Hinweise?

+0

Verwenden Sie ['re (r '\ W + \ w + $', '', str0)'] (http://ideone.com/PL39FG) –

Antwort

3

Fügen Sie ? hinzu, damit die erste Übereinstimmung nicht gierig wird, damit sie so wenig wie möglich übereinstimmt. Fügen Sie auch $ so wird das Spiel immer bis zum Ende der Zeichenfolge gehen:

a = re.match('(.*?)([^0-9]+[0-9]*)$', str0) 
0

Folgendes sollte bis Ende zusammenpassen, was Sie wollen: (-|\+)?\d+(\.\d*)?/(-|\+)?\d+(\.\d*)? Dies würde lassen Sie die Zahlen extrahieren Sie suchen. (?<=\d)[^\d\./][a-zA-Z0-9]*$

Ich bin nicht wirklich sicher, was Sie unter „abgeschnitten“, da Ihrem Beispiel zieht gerade aus: nur das Endteil (getestet auf Ihrem -ch1 Beispiel) Dieses Muster entspricht

würde Gruppen und nicht wirklich manipulieren die Zeichenfolge, um etwas abzuschneiden, aber eines dieser Muster sollte die Teile extrahieren, die Sie suchen.