So verbessern Sie die Segmentierungslogik in Golang

PHPz
Freigeben: 2024-02-09 10:00:41
nach vorne
903 Leute haben es durchsucht

So verbessern Sie die Segmentierungslogik in Golang

In Golang ist das Teilen einer Zeichenfolge ein häufiger Vorgang. Allerdings kann es manchmal zu Problemen mit der Teilungslogik kommen. Wie kann also die Segmentierungslogik in Golang verbessert werden? In diesem Artikel stellt Ihnen der PHP-Editor Yuzai einige praktische Tipps und Methoden vor, die Ihnen helfen, die Segmentierungslogik in Golang zu optimieren und zu verbessern und Ihren Code effizienter und zuverlässiger zu machen. Lasst uns gemeinsam erkunden!

Frageninhalt

Betrachten Sie die folgenden Beispiele als mögliche Werte im Index:

values := [5]string{"32.5ms", "32.5 ms", "32.5%", "32.5 %", "none"}
Nach dem Login kopieren

Bitte beachten Sie, dass der ursprüngliche Wert möglicherweise Leerzeichen für die Maßeinheit enthält (32,5 %, 32,5 %, 32,5 %, usw.)

Ich muss den Gleitkommawert und die Maßeinheit (%, ms usw.) vom ursprünglichen Wert trennen. Der folgende Code liefert mir das gewünschte Ergebnis, aber ich möchte wissen, ob es einen gibt Sauberere Möglichkeit, die gleiche Logik auszuführen, möglicherweise sind keine regulären Ausdrücke erforderlich.

package main

import (
    "fmt"
    "regexp"
    "strings"
)

func main() {

    regexFloatNumbers := regexp.MustCompile(`[-]?\d[\d,]*[\.]?[\d{2}]*`)

    values := [5]string{"32.5ms", "32.5 ms", "32.5%", "32.5 %", "none"}

    for _, value := range values {

        if regexFloatNumbers.MatchString(value) {
            floatValue := regexFloatNumbers.FindString(value)
            fmt.Printf("ORIGINAL VALUE: %q\n", value)
            fmt.Printf("UNIT: %q\n", strings.TrimSpace(regexFloatNumbers.Split(value, -1)[1]))
            fmt.Printf("FLOAT VALUE: %v\n\n", floatValue)
        } else {
            fmt.Printf("float value for %v has not being found!", value)
        }

    }

}
Nach dem Login kopieren

Workaround

Reguläre Ausdrücke scheinen hier gut zu passen. Persönlich würde ich dafür Untergruppen verwenden, etwa so (ich habe auch Ihre Regex bereinigt, die unnötige Syntax hatte und wie eine falsche Schreibweise von [d{2}]* aussah):

regexFloatNumbers := regexp.MustCompile(`(-?\d[\d,]*\.?\d*) *(.*)`)

// ...

floatValue := regexFloatNumbers.FindStringSubmatch(value)
fmt.Printf("ORIGINAL VALUE: %q\n", value)
fmt.Printf("UNIT: %q\n", floatValue[1])
fmt.Printf("FLOAT VALUE: %v\n\n", floatValue[2])
Nach dem Login kopieren

https://www.php.cn/link/8af0c75579a632c9207e51657de43c7c

Das obige ist der detaillierte Inhalt vonSo verbessern Sie die Segmentierungslogik in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!