在Go中使用正则表达式分割字符串

我对Go真的很陌生,到目前为止一直很喜欢。 我正在尝试找到一种使用正则表达式而不是字符串来拆分字符串的好方法。 谢谢</ p>

http://nsf.github .com / go / strings.html?f:Split !</ p>
</ div>

展开原文

原文

I'm really new to Go, and have been enjoying it so far. I'm trying to find a good way to split a string using a regular expression instead of a string. Thanks

http://nsf.github.com/go/strings.html?f:Split!

5个回答



如果您只想分割某些字符,则可以使用 strings.FieldsFunc </ code>,否则我会 与 regexp.FindAllString </ code>一起使用。</ p>
</ div>

展开原文

原文

If you just want to split on certain characters, you can use strings.FieldsFunc, otherwise I'd go with regexp.FindAllString.

douze1332
douze1332 什么都不会“被覆盖”,这只是返回什么的问题。 如果愿意,可以始终使用其他regexp函数来获取索引并使用它们。
6 年多之前 回复
doulan4939
doulan4939 我试过了,但是它覆盖了我想分割的字符。 我不想丢失角色,只需插入一个空格。 我使用了for循环来达到目标​​。 谢谢。 PS-您的答案不包括正则表达式,也许这就是为什么要投反对票的原因?
6 年多之前 回复



您可以使用 regexp.Split </ code>使用正则表达式模式将字符串拆分为字符串切片 分隔符。 </ p>

 包main 

import(
“ fmt”
“ regexp”

func main(){
re:= regexp.MustCompile (“ [0-9] +”)
txt:=“ Have9834a908123great10891819081day!”

split:= re.Split(txt,-1)
set:= [] string {}

i:=范围拆分{
set = append(set,split [i])
}

fmt.Println(set)// [“拥有”,“ a”,“伟大”,“天! “]
}
</ code> </ pre>
</ div>

展开原文

原文

You can use regexp.Split to split a string into a slice of strings with the regex pattern as the delimiter.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    txt := "Have9834a908123great10891819081day!"

    split := re.Split(txt, -1)
    set := []string{}

    for i := range split {
        set = append(set, split[i])
    }

    fmt.Println(set) // ["Have", "a", "great", "day!"]
}



您应该能够创建自己的split函数,该函数遍历RegExp.FindAllString的结果,并将中间的子字符串放入新数组中 。 </ p>

http:// nsf。 github.com/go/regexp.html?m:Regexp.FindAllString !</ p>
</ div>

展开原文

原文

You should be able to create your own split function that loops over the results of RegExp.FindAllString, placing the intervening substrings into a new array.

http://nsf.github.com/go/regexp.html?m:Regexp.FindAllString!

donglizhan7848
donglizhan7848 不知道从哪里获得RegExp,但是正确的软件包名称是regexp。 Go区分大小写!
9 年多之前 回复



regexp.Split()函数将是执行此操作的最佳方法。</ p>
</ div>

展开原文

原文

The regexp.Split() function would be the best way to do this.

doufenzhu7012
doufenzhu7012 看起来是在Go 1.1(2013年5月)中添加的。
大约 3 年之前 回复



我根据Java,C#,PHP中的正则表达式拆分函数的行为制作了一个正则表达式拆分函数。...仅返回 字符串数组,不包含索引信息。</ p>

  func RegSplit(文本字符串,分隔符字符串)[] string {
reg:= regexp.MustCompile(delimeter)
index:= reg.FindAllStringIndex(text,-1)
laststart:= 0
结果:= make([] string,len(indexes)+ 1)
for i,element:=范围索引{
结果 [i] =文本[laststart:element [0]]
laststart =元素[1]
}
结果[len(indexes)] =文本[laststart:len(text)]
返回结果
}

</ code> </ pre>

示例:</ p>

  fmt.Println(RegSplit(“ a1b22c333d”,“ [0-9] +  “))
</代码> </ PRE>

结果:</ p>

 <代码> [ABCD] 
上</代码> </ PRE> \ n </ div>

展开原文

原文

I made a regex-split function based on the behavior of regex split function in java, c#, php.... It returns only an array of strings, without the index information.

func RegSplit(text string, delimeter string) []string {
    reg := regexp.MustCompile(delimeter)
    indexes := reg.FindAllStringIndex(text, -1)
    laststart := 0
    result := make([]string, len(indexes) + 1)
    for i, element := range indexes {
            result[i] = text[laststart:element[0]]
            laststart = element[1]
    }
    result[len(indexes)] = text[laststart:len(text)]
    return result
}

example:

fmt.Println(RegSplit("a1b22c333d", "[0-9]+"))

result:

[a b c d]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问