Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Split-Funktionsäquivalent für reguläre Ausdrücke in Golang

Python-Split-Funktionsäquivalent für reguläre Ausdrücke in Golang

王林
王林nach vorne
2024-02-13 19:45:09469Durchsuche

python 正则表达式 split 函数在 golang 中等效

Im Bereich der Programmierung sind reguläre Ausdrücke ein leistungsstarkes Werkzeug zum Abgleichen und Verarbeiten von Zeichenfolgen. In Python ist die Split-Funktion eine häufig verwendete reguläre Ausdrucksfunktion, mit der eine Zeichenfolge in Teilzeichenfolgen aufgeteilt wird. Entwickler, die Golang verwenden, fragen sich jedoch möglicherweise, wie sie in Golang dieselbe Funktionalität wie die Split-Funktion in Python erreichen können. In diesem Artikel stellt Ihnen der PHP-Editor Zimo vor, wie Sie die Aufteilungsfunktion für reguläre Ausdrücke in Golang äquivalent verwenden, um dieses leistungsstarke Tool besser zu nutzen.

Frageninhalt

Ich habe den folgenden Python-Code, der einem regulären Ausdruck entspricht::

import re
digits_re = re.compile("([0-9ee.+]*)")

p = digits_re.split("hello, where are you 1.1?")

print(p)

Es gibt diese Ausgabe:: ['', '', 'h', 'e', '', '', 'l', '', 'l', '', 'o', '', ',', '', ' '、''、'w'、''、'h'、'e'、''、''、'r'、'e'、''、''、' '、''、'a' , '', 'r', 'e', '', '', ' ', '', 'y', '', 'o', '', 'u', '', ' ', '1.1 ', '', '', '?', '', '']

Ich versuche, die obige Ausgabe mit golang zu erhalten.

package main

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
    "regexp"
    "strconv"
)

func main() {
    // execute the command and get the output
    cmd := exec.command("echo", "hello, where are you 1.1?")
    var out bytes.buffer
    cmd.stdout = &out
    err := cmd.run()
    if err != nil {
        log.fatal(err)
    }

    // extract the numerical values from the output using a regular expression
    re := regexp.mustcompile(`([0-9ee.+]*)`)
    //matches := re.findallstring(out.string(), -1)
    splits := re.split(out.string(), -1)
    fmt.println(splits)

}

Ich erhalte die folgende Ausgabe::

[H l l o ,   w h r   a r   y o u   ? 
]

Ich denke, reguläre Ausdrücke sind sprachabhängig, daher hilft die in Python verwendete Funktion split() nicht split() 函数对 golang 没有帮助。使用了 regexp 包中的多个 find*(). Habe mehrere find*()-Funktionen aus dem regexp-Paket verwendet, konnte aber keine Funktion finden, die die Ausgabe des obigen Python-Programms liefern würde.

Das Ziel der Ausgabe eines String-Arrays besteht darin, Zeichen zu trennen, die nicht in float konvertiert werden können, und wenn der String als Gleitkomma geparst werden kann, berechne ich den gleitenden Durchschnitt.

Zum Schluss kombiniere ich alles und präsentiere die Ausgabe wie einen Linux-Befehl watch.

Benötigen Sie weitere Details/Hintergrundinformationen? Ich teile es gerne.

Vielen Dank für Ihre Hilfe!

Workaround

In der Zwischenzeit habe ich etwas, das für meinen Anwendungsfall funktioniert. Es hat nicht genau das gleiche Format wie python, enthält aber nicht die leere Zeichenfolge/das leere Zeichen.

Ich habe die Funktion splitfindallstring verwendet, um die gewünschte Ausgabe zu erhalten.

// unfortunately go regex split doesn't work like python
    // so we construct the entire array with matched string (numericals)
    // and the split strings to combine the output
    splits := digitsre.split(string(out), -1)
    matches := digitsre.findallstring(string(out), -1)

    p := []string{}
    for i := 0; i < len(splits); i++ {
        p = append(p, matches[i])
        p = append(p, splits[i])
    }

Mit dem obigen Codeausschnitt erhalte ich so etwas wie ::

[H e l l o ,   w h e r e   a r e   y o u  1.1 ?]

Ich bin nicht sehr gut darin regex und irgendwie funktioniert die obige Methode für meinen Anwendungsfall.

Um es etwas leichter zu formulieren: Ich habe meine Kollegen scherzen hören, dass, wenn man ein Problem mit regexs Hilfe löst, man am Ende zwei Probleme haben wird! ! !

Das obige ist der detaillierte Inhalt vonPython-Split-Funktionsäquivalent für reguläre Ausdrücke in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen