Dienstag, Dezember 10, 2019

Wie schreiben Sie einfachen regex in golang?

Ich bin versucht, zu schreiben regexp liefert den substring in string beginnt mit Punkt und bis zum ersten Platz. Aber ich bin neu in regulären Ausdrücken, so habe ich versucht, etwas
und es funktioniert überhaupt nicht:

package main

import "fmt"
import "regexp"

func main() {
    re := regexp.MustCompile("\.* ")
    fmt.Printf(re.FindString(".d 1000=11,12")) //Must return d
    fmt.Printf(re.FindString("e 2000=11"))     //Must return nothing or ""
    fmt.Printf(re.FindString(".e2000=11"))     //Must return nothing or ""
}

dieser code nur weiß 3 weiße Raum, in golang. Was mache ich falsch?

  • regexp.MustCompile("\\..*\\s") für mich funktioniert, zumindest für deine Beispiele.
InformationsquelleAutor Lobster | 2014-03-09

2 Kommentare

  1. 14

    Während * ist die wildcard in glob matching, es ist nicht die Platzhalter in regex. In regex – . ist die wildcard und * bedeutet Wiederholung 0 oder mehrmals. Sie wollen wahrscheinlich:

    re := regexp.MustCompile("\..* ")

    gehen Spielplatz

    Aber Sie möglicherweise feststellen, dass es auch wieder den Punkt und Raum. Sie können FindStringSubmatch und verwenden eines capture-Gruppe, um dieses Problem zu lösen, und Sie können backsticks, so dass Sie nicht haben, um doppelte escape Dinge:

    re := regexp.MustCompile(`\.(.*) `)
    match := re.FindStringSubmatch(".d 1000=11,12")
    if len(match) != 0 {fmt.Printf("1. %s\n", match[1])}

    gehen Spielplatz

    Obwohl, ich würde lieber mit \S* (passt nicht-Leerzeichen) anstelle von .* um dieses match, denn es werden reduzieren das mögliche backtracking:

    re := regexp.MustCompile(`\.(\S*) `)

    gehen Spielplatz

    • Warum sind Sie Sie heraus Spielplatz links auf den code? Über die edit-history die links funktionieren immer noch perfekt gut.
    • Sind Sie? Bekomme ich die Meldung ‚verboten‘, wenn ich den links Folgen, nun, und play.golang.org nicht über die Schaltfläche speichern code nicht mehr (pic: i.stack.imgur.com/sQCu7.png)
    • Wie es aussieht ist auf meiner Seite. Es gibt einige firewall vielleicht =/ ich werde ein Rollback
  2. 0

    Die ersten 2 Zeichen, die Sie schreiben \\ bedeuten, dass man escaping-backslash, so dass Sie erwarten umgekehrten Schrägstrich als erstes Zeichen. Sie schreiben sollte ^\..*? statt:

    • ^ – bedeutet Anfang
    • \. – bedeutet die Flucht Punkt (also zusammen mit einem oben bedeutet, dass Sie erwarten, dass Punkt als erstes Zeichen)
    • .*? – beliebiges Zeichen (Punkt), eine beliebige Anzahl von Ihnen (Sternchen), nicht gierig (Fragezeichen) bis zum Raum (space)

    Non-greedy bedeutet, es wird halt auf den ersten Platz nicht bei der letzten

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...