Bedenken Sie, ich habe den folgenden Text: Temp:C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2, adfsafd1242412,
Und ich möchte alle Daten nach Temp:
und bis zum ersten Auftreten von ,
abfangen, was bedeutet: C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2
Ich habe versucht, Regex Temp:(.+,)
ohne Erfolg zu verwenden
Wie sage ich der Regex, dass ,
als erstes gefunden werden soll?
4 Antworten
Um den gewünschten Wert zu erfassen, können Sie versuchen, Lazy Matching Dot (.+?
) zu verwenden. entspricht 1 oder mehr Zeichen - aber so wenig wie möglich - das sind alle Zeichen außer einer neuen Zeile):
Temp:(.+?),
Da Lazy Matching möglicherweise mehr verschlingt als Sie benötigen, wird eine negierte Zeichenklasse ([^,]+
entspricht 1 oder mehr anderen Zeichen als einem Komma) sieht vorzuziehen:
Temp:([^,]+)
Das Ergebnis wird mit der Erfassungsgruppe (Klammern) in Gruppe 1 erfasst.
import re
p = re.compile(r'Temp:([^,]+)')
test_str = "Temp:C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2, adfsafd1242412,"
print (re.search(p, test_str).group(1))
Ausgabe: C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2
HINWEIS , dass eine auf Look-Around basierende Lösung ressourcenintensiver ist als die von Ihnen und mir verwendete Erfassungsgruppe.
Sie müssen das Zeichen ?
verwenden, um das +
ungreedy zu machen. Andernfalls stimmen alle ,
Zeichen auch mit dem .+
Teil der Regex überein. In meiner Antwort habe ich das ,
aus der Gruppe verschoben, da ich anhand Ihrer Beschreibung verstanden habe, dass Sie es im Match eigentlich nicht wollten.
import re
matcher = re.compile("Temp:(.+?),")
matcher.match(a).group(1)
Versuchen Sie den folgenden regulären Ausdruck: Temp:([^,]+,)
Jetzt ist alles nach Temp:
bis zum ersten ,
enthalten.
Sie können diesen Lookbehind-basierten regulären Ausdruck verwenden:
(?<=Temp:)[^,]+
Code :
s='Temp:C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2, adfsafd1242412,'
print re.search(r"(?<=Temp:)[^,]+", s).group()
Ausgabe:
C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.