Ich habe ein Python-Skript, das mit einer anderen Anwendung kommuniziert (ein Debugger mit einem eingebetteten Ziel, um genau zu sein) mit einer Socket-Verbindung. Die Antworten vom Debugger können unterschiedlich lang sein und mehrere Zeilen umfassen, aber sie enden immer mit True\r\n
oder False\r\n
. Ich möchte True
oder False
einschließlich der Newline-Zeichen erfassen.Suche nach Substring einschließlich Carriage Return und Newline-Zeichen
Der reguläre Ausdruck Ich verwende (z r'^[.]+|[\r]+|[\n]+(True\r\n)$'
für True) scheint, wenn sie auf regex101.com getestet zu arbeiten, aber nur zurückgibt \r
, wenn sie mit Python laufen.
Beispielcode mit einer Probe Antwortstring:
import re
sample_response = 'var0 = 0x00000001\r\nTrue\r\n'
re_true = re.compile(r'^[.]+|[\r]+|[\n]+(True\r\n)$')
print re_true.search(sample_response).group(0) # Will print out '\r'
Ich weiß, dass es etwas grundlegend falsch mit der Regex ist ich verwende. Ich habe auch versucht, positive Lookbehind wie unten gezeigt und das scheint zu funktionieren, aber ich bin mir nicht sicher, ob dies der richtige Weg, dies zu tun:
import re
sample_response = 'var0 = 0x00000001\r\nTrue\r\n'
re_true = re.compile(r'(?<=(True\r\n))')
print re_true.search(sample_response).group(0) # Will print out ''
print re_true.search(sample_response).group(1) # Will print out 'True\r\n'
Ja, aber regex101 hat kein '\ r', sein Zeilenumbruch ist' \ n'. Deine Regex stimmt mit '\ r' in deiner Eingabe überein, bevor du den' True' Part ausprobierst und es ist die erste Alternative, die in NFA regex gewinnt. Versuchen Sie 're.findall' oder überdenken Sie die Anforderungen. –
Yup, ich benutze \ n auf regex101.com zum Testen meiner Regex ... unabhängig davon, die regex101 Referenz war wahrscheinlich TMI und ist nicht wirklich meine Frage :) – schaazzz
Ich werde mit findall testen ... danke! – schaazzz