Rumah  >  Artikel  >  pembangunan bahagian belakang  >  fungsi split ekspresi biasa python setara dalam golang

fungsi split ekspresi biasa python setara dalam golang

王林
王林ke hadapan
2024-02-13 19:45:09469semak imbas

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

Dalam bidang pengaturcaraan, ungkapan biasa ialah alat yang berkuasa untuk memadankan dan memproses rentetan. Dalam Python, fungsi split ialah fungsi ungkapan biasa yang biasa digunakan untuk memisahkan rentetan kepada subrentetan. Walau bagaimanapun, bagi pembangun yang menggunakan Golang, mereka mungkin tertanya-tanya bagaimana untuk mencapai fungsi yang sama dalam Golang sebagai fungsi split dalam Python. Dalam artikel ini, editor PHP Zimo akan memperkenalkan anda kepada cara menggunakan fungsi pemisahan ungkapan biasa secara setara di Golang untuk menggunakan alat berkuasa ini dengan lebih baik.

Kandungan soalan

Saya mempunyai kod python berikut untuk dipadankan dengan ungkapan biasa::

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

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

print(p)

Ia memberikan output ini:: ['', '', 'h', 'e', '', '', 'l', '', 'l', '', 'o', '', ',', '', ' '、''、'w'、''、'h'、'e'、''、''、'r'、'e'、''、''、' '、''、'a' , '', 'r', 'e', '', '', ' ', '', 'y', '', 'o', '', 'u', '', ' ', '1.1 ', '', '', '?', '', '']

Saya cuba mendapatkan output di atas menggunakan 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)

}

Saya mendapat output berikut::

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

Saya rasa ungkapan biasa bergantung kepada bahasa, jadi fungsi split() yang digunakan dalam python tidak membantu split() 函数对 golang 没有帮助。使用了 regexp 包中的多个 find*(). Menggunakan beberapa fungsi find*() daripada pakej regexp, tetapi tidak dapat mencari fungsi yang akan memberikan output program python di atas.

Matlamat untuk mengeluarkan tatasusunan rentetan adalah untuk memisahkan aksara yang tidak boleh ditukar kepada float dan jika rentetan itu boleh dihuraikan sebagai apungan, saya mengira purata bergerak.

Akhir sekali, saya menggabungkan semuanya dan membentangkan output seperti arahan linux watch.

Adakah anda memerlukan butiran lanjut/latar belakang? Saya gembira untuk berkongsi.

Terima kasih banyak atas bantuan anda!

Penyelesaian

Sementara itu, saya mendapat sesuatu yang sesuai untuk bekas penggunaan saya. Ia bukan format yang sama seperti python , tetapi tidak mempunyai rentetan/karakter kosong.

Saya menggunakan fungsi splitfindallstring untuk mendapatkan output yang diingini.

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

Dengan coretan kod di atas, saya mendapat sesuatu seperti ::

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

Saya tidak begitu mahir dalam regex, dan entah bagaimana kaedah di atas berfungsi untuk kes penggunaan saya.

Secara ringkasnya, saya mendengar rakan sekerja saya bergurau bahawa jika anda menyelesaikan masalah dengan bantuan regex, anda akan menghadapi dua masalah! ! !

Atas ialah kandungan terperinci fungsi split ekspresi biasa python setara dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam