Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führen reguläre Go- und Python-Ausdrücke zu unterschiedlichen Ergebnissen?

Warum führen reguläre Go- und Python-Ausdrücke zu unterschiedlichen Ergebnissen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-24 12:23:15307Durchsuche

Why Do Go and Python Regular Expressions Produce Different Results?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn