Verhalten regulärer Ausdrücke in verschiedenen Sprachen: Go vs. Python
Beim Versuch, reguläre Ausdrücke in Go zu verwenden, können Entwickler auf unerwartetes Verhalten stoßen. Betrachten Sie zum Beispiel den folgenden Code:
package main import ( "fmt" "regexp" ) func main() { a := "parameter=0xFF" regex := "^.+=\b0x[A-F][A-F]\b$" result, err := regexp.MatchString(regex, a) fmt.Println(result, err) // Prints: false <nil> }
Dieser Code stimmt nicht mit der erwarteten Eingabezeichenfolge überein, obwohl er in Python ordnungsgemäß funktioniert:
import re p = re.compile(r"^.+=\b0x[A-F][A-F]\b$") m = p.match("parameter=0xFF") if m is not None: print(m.group()) # Prints: parameter=0xFF
Die Hauptursache für diese Diskrepanz liegt in die Unterschiede zwischen String-Literalen in Go und Python. In Go gelten String-Literale standardmäßig als „gekocht“, d. h. sie werden für Sonderzeichen wie Escape-Sequenzen interpretiert. Bei regulären Ausdrücken ist dieses Verhalten jedoch problematisch.
Um dieses Problem zu beheben, stellt Go rohe String-Literale bereit. Rohe String-Literale werden in Anführungszeichen (`) anstelle von Anführungszeichen (") eingeschlossen. Sie ignorieren alle Sonderzeichen oder Escape-Sequenzen und stellen so sicher, dass das Literal genau wie geschrieben interpretiert wird.
Beheben Sie daher das Problem mit Im Go-Code sollte der reguläre Ausdruck als rohes String-Literal angegeben werden:
var regex = `^.+=\b0x[A-F][A-F]\b$`
Mit dieser Änderung stimmt der Code nun korrekt mit der Eingabezeichenfolge überein und erzeugt das gewünschte Ergebnis Ergebnis.
Das obige ist der detaillierte Inhalt vonWarum führen reguläre Go- und Python-Ausdrücke zu unterschiedlichen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!