Home >Backend Development >Golang >python regular expression split function equivalent in 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.
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!
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!