Maison > développement back-end > Golang > le corps du texte

fonction de division d'expression régulière python équivalente à golang

王林
Libérer: 2024-02-13 19:45:09
avant
440 Les gens l'ont consulté

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

Dans le domaine de la programmation, les expressions régulières sont un outil puissant pour faire correspondre et traiter des chaînes. En Python, la fonction split est une fonction d'expression régulière couramment utilisée pour diviser une chaîne en sous-chaînes. Cependant, pour les développeurs utilisant Golang, ils peuvent se demander comment obtenir les mêmes fonctionnalités que la fonction split de Python dans Golang. Dans cet article, l'éditeur PHP Zimo vous expliquera comment utiliser la fonction de fractionnement d'expression régulière de manière équivalente dans Golang pour mieux utiliser cet outil puissant.

Contenu de la question

J'ai le code python suivant pour correspondre à une expression régulière ::

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

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

print(p)
Copier après la connexion

Cela donne ce résultat : : ['', '', 'h', 'e', '', '', 'l', '', 'l', '', 'o', '', ',', '', ' '、''、'w'、''、'h'、'e'、''、''、'r'、'e'、''、''、' '、''、'a' , '', 'r', 'e', '', '', ' ', '', 'y', '', 'o', '', 'u', '', ' ', '1.1 ', '', '', '?', '', '']

J'essaie d'obtenir le résultat ci-dessus en utilisant golang.

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)

}
Copier après la connexion

J'obtiens le résultat suivant ::

[H l l o ,   w h r   a r   y o u   ? 
]
Copier après la connexion

Je pense que les expressions régulières dépendent de la langue, donc la fonction split() utilisée en python n'aide pas split() 函数对 golang 没有帮助。使用了 regexp 包中的多个 find*(). J'ai utilisé plusieurs fonctions find*() du package regexp, mais je n'ai pas trouvé de fonction qui fournirait la sortie du programme python ci-dessus.

Le but de la sortie d'un tableau de chaînes est de séparer les caractères qui ne peuvent pas être convertis en float et si la chaîne peut être analysée comme un flottant, je calcule la moyenne mobile.

Enfin, je combine le tout et présente le résultat comme une commande Linux watch.

Avez-vous besoin de plus de détails/contexte ? Je suis heureux de partager.

Merci beaucoup pour votre aide !

Solution de contournement

En attendant, j'ai obtenu quelque chose qui fonctionne pour mon cas d'utilisation. Ce n'est pas exactement le même format que python , mais il n'a pas de chaîne/caractère vide.

J'ai utilisé la fonction splitfindallstring pour obtenir le résultat souhaité.

// 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])
    }
Copier après la connexion

Avec l'extrait de code ci-dessus, j'obtiens quelque chose comme ::

[H e l l o ,   w h e r e   a r e   y o u  1.1 ?]
Copier après la connexion

Je ne suis pas très bon en regex, et d'une manière ou d'une autre, la méthode ci-dessus fonctionne pour mon cas d'utilisation.

Sur une note plus légère, j'ai entendu mes collègues plaisanter en disant que si vous résolvez un problème avec l'aide de regex, vous vous retrouverez avec deux problèmes ! ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!