Home  >  Article  >  Backend Development  >  python regular expression split function equivalent in golang

python regular expression split function equivalent in golang

王林
王林forward
2024-02-13 19:45:09421browse

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

In the field of programming, regular expressions are a powerful tool for matching and processing strings. In Python, the split function is a commonly used regular expression function used to split a string into substrings. However, for developers using Golang, they may wonder how to achieve the same functionality in Golang as the split function in Python. In this article, PHP editor Zimo will introduce you to how to use the regular expression split function equivalently in Golang to better utilize this powerful tool.

Question content

I have the following python code to match a regular expression::

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

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

print(p)

It gives this output:: ['', '', 'h', 'e', ​​'', '', 'l', '', 'l', '', 'o', '', ',', ' ', ' ', '', 'w', '', 'h', 'e', ​​'', '', 'r', 'e', ​​'', '', ' ', '', ' a' , '', 'r', 'e', ​​'', '', ' ', '', 'y', '', 'o', '', 'u', '', ' ', '1.1 ', '', '', '?', '', '']

I'm trying to get the above output using 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)

}

I get the following output::

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

I think regular expressions are language dependent, so the split() function used in python is not helpful for golang. Used multiple find*() functions from the regexp package, but could not find one that would provide the output of the above python program.

The goal of the output string array is to separate characters that cannot be converted to float, and if the string can be parsed as a float, I calculate the moving average.

Finally, I combine everything and present the output like a linux watch command.

Do you need more details/background? I'm happy to share.

Thank you for your help!

Workaround

In the meantime, I got something that works for my use case. It is not exactly the same format as python but does not have the empty string/character.

I used the split and findallstring functions to get the desired output.

// 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])
    }

With the above code snippet, I get something like ::

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

I'm not very good at regex, and somehow the above method works for my use case.

On a lighter note, I've heard colleagues joke that if you solve a problem with the help of regex, you'll end up with two problems! ! !

The above is the detailed content of python regular expression split function equivalent in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete