Golang 如何使用Regex拆分文本

Golang 如何使用Regex拆分文本

什么是正则表达式? 正则表达式是著名的动漫角色吗? 哎呀,如果你那么想,你可能会失望的。 Golang编程语言使用术语 regexp 来表示 正则表达式 。 正则表达式在字符串处理领域非常重要。 Go中的“ regexp ”包包含所有必要的预构函数,可以实现正则表达式搜索,并保证在所提供的输入大小上进行线性搜索。

如何使用正则表达式(或regex)拆分输入文本

Regexp包中包含Split函数,可帮助拆分输入文本字符串。在我们深入了解regexp split函数之前,让我们简要介绍一些基本的正则表达式,这些表达式在使用split函数时值得记住:

字符 意义 语法示例 正则表达式结果
[ ] [ ] 用于包含或排除给定范围,甚至指定我们要包含或排除的字符。 [ ] 在范围内既包括左端点又包括右端点。 [b-f]an ban, can, dan, ean, fan
{ } 大括号用于匹配任何给定表达式的出现频率。 gf{1,}g gfg, gffg, gfffg,...
( ) ( ) 用于包含或排除给定范围,甚至指定我们要包含或排除的字符。 ( ) 表示编号捕获组。 (b-f)an ban, can, dan, ean, fan
* * 匹配前面的字符的 0/0+ 次出现。 gee*k gek, geek, geeek,...
\+ \+ 匹配前面的字符的 1/1+ 次出现。 gee+k geek, geeek,...
? ? 匹配前一个字符的 0 或 1 次出现。 gee?k gek, geek
. 点号可以匹配除了换行符 (\n) 以外的任何字符。 g.g gfg, gbg, gcg,...
^ ^ 后面的串开始的文本。 也用作组或其他正则表达式的拒绝(NOT)操作符。 ^ge [^0-8]* ge, geek, geeks,... ‘ ‘,9, 99,999,...
$ 对于单行文本,它表示字符串末尾;对于多行文本,它表示行末。 $de code, decode,...
| | 表示或操作。 geek|principle geek, geeks, principle, principles,…
\ 反斜杠是转义字符 如果您需要提及类似 \s 的任何内容,则需要使用 \\\s,以便系统理解它是 \s \A
\s 提取所有白空格。 \\\s “, ” “, ” “,...
\d 提取所有数字。 \\\d 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

语法:

func Split(s: string , n: int ) []string
Go

此函数接受一个字符串和一个整数,返回所有子字符串的切片。输入字符串“ s ”将根据给定的正则表达式进一步拆分为子字符串,由Split函数返回。 “ n ”表示决定要返回的子字符串数量的值。

  • 如果 n > 0:表示最多n个子字符串将经过正则表达式操作并将返回。
  • 如果 n = 1 ,则不进行正则表达式操作,因此将返回原始字符串。
  • 如果 n = 0 :表示不返回任何子字符串,应返回一个nill。
  • 如果 n < 0:表示将返回创建的所有子字符串。

示例1:

package main

import (
    f "fmt"
    re "regexp"
    //我们将regexp包作为re导入
)

// SPLIT功能Hack
//一般来说,每当字符串
//发生(分割为子字符串)
//字符串(作为split参数给出)

func main() {

    //str保存示例字符串,如下所示
    str:=“我在GFG!”
           “您可以在9087651234处给我打电话。”

    //仅打印原始字符串:str
    f.Println(str)

    //在此示例代码中,我们将考虑两种情况

    //情况1:
    //存储仅包含数字的regex对象
    //在obj1中。
    obj1:= re.MustCompile(\\d *“)

    //情况2:
    //存储除数字以外的所有内容的regex对象
    //在obj2中。
    obj2:= re.MustCompile(\\ D *“)

    //使用obj1作为参考,我们
    //正在拆分字符串:str
    // -1表示将包括创建的所有子字符串。
    first:= obj1.Split(str,-1//“first”在容器中保存解析自str的所有子字符串
    //根据obj1进行拆分
    //例如列表等容器。

    //使用obj2作为参考,我们
    //正在拆分字符串:str
    // -1表示将包括创建的所有子字符串。
    second:= obj2.Split(str,-1// “second”在容器中保存解析自str的所有子字符串
    //根据obj2进行拆分
    //例如列表等容器。

    f.Println(“现在打印按obj1拆分的文本...”)
    for_,p:= range first {
        f.Println(p)
    }

    f.Println(“现在打印按obj2拆分的文本...”)
    for_,q:= range second {
        f.Println(q)
    }
} 
Go

执行命令:

> go run(your_file_name).go
Go

输出:

我在GFG!
您可以在9087651234处给我打电话。
现在打印按obj1拆分的文本...
我

a 
m

a
t

G
F
G 
!

Y 
o 
u

c
a
n

c 
a 
l
l

m
e

a
t

.
现在打印按obj2拆分的文本...

9
0
8
7
6
5 
1
2
3
4
Go

Visual Studio Code上的视觉I / O演示:

Golang 如何使用Regex拆分文本

在运行上述编写的代码的屏幕上的代码输出。

示例2:

package main
  
import (
    f "fmt"
    re "regexp"
)
  
// 理解 Split 函数的功能和参数的简单示例代码
// regex-object.Split(string: , n: )
  
func main() {
  
    // 在此示例中将使用的示例字符串“GeeksforGeeks loves bananas”
    str := "GeeksforGeeks loves bananas"
    f.Println(str)
  
    f.Println("Part-1:从给定字符串中排除所有元音字母")
      
    // 用于存储所有元音字母的 RegExp 对象(geek)
    geek := re.MustCompile("[aeiou]")
    f.Print("Printing all substring lists = ")
      
    // 检查 n=-1 的分割情况
    f.Println(geek.Split(str, -1))
    f.Print("For n = 0 substring list = ")
      
    // 检查 n=0 的分割情况
    f.Println(geek.Split(str, 0))
    f.Print("For n = 1 substring list = ")
      
    // 检查 n=1 的分割情况
    f.Println(geek.Split(str, 1))
    f.Print("For n = 10 substring list = ")
      
    // 检查 n=10 的分割情况
    f.Println(geek.Split(str, 10))
    f.Print("For n = 100 substring list = ")
      
    // 检查 n=100 的分割情况
    f.Println(geek.Split(str, 100))
  
    f.Println("\n\nPart-2:从给定字符串中提取所有元音字母")
      
    // 用于存储所有辅音字母的 RegExp 对象(geek)
    geek = re.MustCompile("[^aeiou]")
      
    f.Print("Printing all substring lists = ")
      
    // 检查 n=-1 的分割情况
    f.Println(geek.Split(str, -1))
    f.Print("For n = 0 substring list = ")
      
    // 检查 n=0 的分割情况
    f.Println(geek.Split(str, 0))
    f.Print("For n = 1 substring list = ")
      
    // 检查 n=1 的分割情况
    f.Println(geek.Split(str, 1))
    f.Print("For n = 10 substring list = ")
      
    // 检查 n=10 的分割情况
    f.Println(geek.Split(str, 10))
    f.Print("For n = 100 substring list = ")
      
    // 检查 n=100 的分割情况
    f.Println(geek.Split(str, 100))
  
    // 您是否注意到 Split 函数不修改原始的 RegExp 匹配对象?
} 
Go

执行命令:

> go run (your_file_name).go
Go

输出:

GeeksforGeeks loves bananas
Part-1:从给定字符串中排除所有元音字母
Printing all substring lists = [G  ksf rG  ks l v s b n n s]
For n = 0 substring list = []
For n = 1 substring list = [GeeksforGeeks loves bananas]
For n = 10 substring list = [G  ksf rG  ks l v s b n nas]
For n = 100 substring list = [G  ksf rG  ks l v s b n n s]


Part-2:从给定字符串中提取所有元音字母
Printing all substring lists = [ ee   o  ee    o e   a a a ]
For n = 0 substring list = []
For n = 1 substring list = [GeeksforGeeks loves bananas]
For n = 10 substring list = [ ee   o  ee   loves bananas]
For n = 100 substring list = [ ee   o  ee    o e   a a a ]
Go

在 Visual Studio Code 上的可视化演示:

Golang 如何使用Regex拆分文本

运行上述代码后屏幕上的代码输出。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册