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
此函数接受一个字符串和一个整数,返回所有子字符串的切片。输入字符串“ 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 run(your_file_name).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
Visual Studio Code上的视觉I / O演示:
在运行上述编写的代码的屏幕上的代码输出。
示例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 run (your_file_name).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 ]
在 Visual Studio Code 上的可视化演示:
运行上述代码后屏幕上的代码输出。