Golang 使用正则表达式打印每个单词的首字母
一串字符被称为正则表达式(regex或regexp)创建了搜索模式。正则表达式经常被用于进行字符串匹配,有时被称为“查找和替换”或字符串模式匹配。它们也可以用于输入验证、解析和其他任务。正则表达式使用特殊字符和元字符来指定要匹配的模式,它们的语法在不同的计算机语言之间有很大的区别。让我们看一些不同的Golang示例,以便更清楚地了解这个概念。
方法1:使用regex.MustCompile()函数
在这个示例中,我们将看到如何使用regex.MustCompile()函数打印每个单词的首字母。该程序创建一个正则表达式,使用regexp库来匹配每个单词的首字母。输入字符串使用FindAllString方法搜索与其匹配的正则表达式的每个实例,并将结果字符串切片报告给控制台。让我们通过“示例”和算法来更清楚地理解这个概念。
语法
regex.MustCompile()
Go标准库的regexp包包含一个名为MustCompile()的函数,将正则表达式模式转换为具有正则表达式(regex)的结构体。然后,使用FindAllString()、FindString()和ReplaceAllString等函数,可以使用该结构体与其他字符串进行比较。一个方便的函数,如果表达式无法解析并包装Compile()函数,则会引发panic。
步骤
- 步骤1 - 在程序中创建一个名为main的包并声明fmt(格式化包)和regexp包,其中main产生可执行实例,fmt用于格式化输入和输出。
-
步骤2 - 创建一个名为main的函数,在该函数中使用regexp.MustCompile函数创建一个匹配每个单词初始字母的正则表达式对象。
-
步骤3 - 使用正则表达式对象的FindAllString函数在输入字符串中查找正则表达式的每个实例。
-
步骤4 - 将FindAllString函数的输出放入名为print_firstletter的变量中。
-
步骤5 - 使用fmt.Println方法将结果字符串切片打印到控制台。
-
步骤6 - 此算法使用正则表达式打印出与输入字符串的第一个字母匹配的所有单词。
示例
package main
import (
"fmt"
"regexp"
)
func main() {
mystr := "Hello, alexa!" //create a string
fmt.Println("The inital value of string is:", mystr)
reg := regexp.MustCompile("\b[a-zA-Z]") //create a regular expression object
print_firstletter := reg.FindAllString(mystr, -1)
fmt.Println("The first letter of each word is:")
fmt.Println(print_firstletter) //print first letter of each word
}
输出
The inital value of string is: Hello, alexa!
The first letter of each word is:
[]
方法2:使用strings.Field()函数
在这种方法中,我们使用fields函数,通过for循环将输入字符串按单词迭代分割。它使用字符串索引在循环内打印每个单词的第一个字母。让我们通过示例和算法来了解其执行过程。
语法
strings.Fields()
函数fields()用于根据空白字符将字符串分割成多个子字符串。返回的切片包含原始文本中由空白字符分隔的所有子字符串(空格、制表符和换行符)。这个操作不会改变原始字符串。
步骤
- 第一步 - 创建一个main包,并在程序中声明fmt(格式化包)和strings(字符串包),其中main产生可执行的示例,fmt帮助格式化输入和输出。
-
第二步 - 创建一个main函数,在该函数中创建一个字符串变量来保存输入值,命名为mystr。
-
第三步 - 使用strings.Fields()将输入字符串切片为单词,并使用for循环遍历这些单词。
-
第四步 - 在循环内使用字符串索引来获取当前单词的首字母。
-
第五步 - 使用fmt.Println()函数打印单词的首字母,其中ln表示换行。
-
第六步 - 对于每个单词,再次执行步骤4-6。
-
第七步 - 此算法循环遍历输入字符串中的单词,并在每次迭代后打印每个单词的首字母。它更节省内存,并且不使用正则表达式。
示例
在此示例中,我们将学习如何使用strings.Fields()函数打印每个单词的首字母。
package main
import (
"fmt"
"strings"
)
func main() {
mystr := "Hello, alexa!" //create a string
fmt.Println("The string created here is:", mystr)
words := strings.Fields(mystr) //use the built-in function to separate the string into words
fmt.Println("The initial character of the mystr is:")
for _, word := range words {
fmt.Print(string(word[0])) //print the first letter of each word
}
}
输出
The string created here is: Hello, alexa!
The initial character of the mystr is:
Ha
结论
我们执行了上面的程序,使用了两个示例来打印每个单词的第一个字符。在第一个示例中,我们使用了regex.MustCompile函数,在第二个示例中,我们使用了strings.Fields()函数。这两个程序都输出相似的结果。
极客笔记