Go语言文本处理:正则表达式与字符串操作

news2024/11/24 12:23:50

大家好,我是[lincyang]。

今天,我们将一起探讨Go语言在文本处理方面的强大功能,特别是正则表达式和字符串操作。

Go语言以其简洁和高效而闻名,这些特性在文本处理上也得到了很好的体现。

接下来,我将通过丰富的案例和Demo,带你深入了解这一主题。

正则表达式在Go中的应用

正则表达式是用于匹配字符串中字符组合的模式。在Go语言中,regexp包提供了正则表达式的功能。

基本匹配

首先,我们来看一个简单的例子,如何使用正则表达式匹配字符串:

package main
​
import (
    "fmt"
    "regexp"
)
​
func main() {
    re := regexp.MustCompile(`foo.?`)
    fmt.Printf("%q\n", re.FindString("seafood fool"))
    fmt.Printf("%q\n", re.FindString("meat"))
}

输出将会是:

"food"
""

在这个例子中,foo.? 表示匹配 "foo" 后面跟着零个或一个任意字符。

分组和捕获

正则表达式的一个强大功能是分组和捕获,它允许我们从字符串中提取我们感兴趣的部分。

package main
​
import (
    "fmt"
    "regexp"
)
​
func main() {
    re := regexp.MustCompile(`(\w+)@(\w+)\.(\w+)`)
    match := re.FindStringSubmatch("my email is example@example.com")
    
    fmt.Println("Full match:", match[0])
    fmt.Println("Username:", match[1])
    fmt.Println("Domain:", match[2])
    fmt.Println("TLD:", match[3])
}

输出:

Full match: example@example.com
Username: example
Domain: example
TLD: com

这个例子中,我们使用了括号来创建捕获组,这样我们就可以单独提取电子邮件的各个部分。

复杂匹配和替换

正则表达式同样可以用于更复杂的文本替换操作。

package main
​
import (
    "fmt"
    "regexp"
)
​
func main() {
    re := regexp.MustCompile(`(\w+)(@)(\w+)(\.)(\w+)`)
    formatted := re.ReplaceAllString("example@example.com", "$1 [at] $3$4$5")
    
    fmt.Println(formatted)
}

输出:

example [at] example.com

在这个例子中,我们将电子邮件地址中的 "@" 替换为了 " [at] ",以避免电子邮件地址被自动抓取。

字符串操作

除了正则表达式,Go语言的 strings 包也提供了一系列强大的字符串操作函数。

字符串分割

package main
​
import (
    "fmt"
    "strings"
)
​
func main() {
    fmt.Printf("%q\n", strings.Split("a,b,c", ","))
}

输出:

["a" "b" "c"]

字符串连接

package main
​
import (
    "fmt"
    "strings"
)
​
func main() {
    s := []string{"foo", "bar", "baz"}
    fmt.Println(strings.Join(s, ", "))
}

输出:

foo, bar, baz

字符串修剪

package main
​
import (
    "fmt"
    "strings"
)
​
func main() {
    fmt.Printf("[%q]\n", strings.Trim(" !!! Achtung !!! ", "! "))
}

输出:

["Achtung"]

在这个例子中,我们移除了字符串两端的感叹号和空格。

字符串查找和替换

package main
​
import (
    "fmt"
    "strings"
)
​
func main() {
    fmt.Println(strings.Contains("seafood", "foo"))
    fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
}

输出:

true
oinky oinky oink

在这个例子中,我们首先检查了一个字符串是否包含另一个字符串,然后我们替换了 "oink" 中的 "k",但只替换了前两次出现。

结合正则表达式和字符串操作

在实际的文本处理中,我们经常需要将正则表达式和字符串操作结合起来使用,以达到最佳的效果。

package main
​
import (
    "fmt"
    "regexp"
    "strings"
)
​
func main() {
    data := "The quick brown fox jumps over the lazy dog"
    re := regexp.MustCompile(`[aeiou]`)
    processedData := re.ReplaceAllStringFunc(data, strings.ToUpper)
    
    fmt.Println(processedData)
}

输出:

ThE qUIck brOwn fOx jUmps OvEr thE lAzy dOg

在这个例子中,我们使用正则表达式找到了所有的元音字母,并使用字符串操作将它们转换为大写。

结语

Go语言在文本处理方面的能力非常强大,无论是正则表达式还是字符串操作,都能为我们提供灵活而高效的解决方案。通过本文的介绍和案例,相信你已经对Go语言处理文本有了更深入的了解。实践是检验真理的唯一标准,不妨动手尝试一下,将这些知识应用到你的项目中去。

记得关注我的微信技术公众号「lincyang新自媒体」,我将定期为大家呈现更多技术干货、职场感悟、架构知识、AI使用等内容

我与几位大佬的编程小册上线了!里面内容涵盖java、go、mysql、rust等诸多内容,限时10元买断,物超所值!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA的元素组件

注意:关于FPGA的元素这一块儿内容,稍有出入。例如:吉姆莱丁 著,陈会翔 译,由清华大学出版社出版的《构建高性能嵌入式系统》中提到:FPGA通常由查找表、触发器、块RAM、DSP切片、及其他功能元件等元素组成。…

C语言----每日五道选择题Day1

1.第一题 1、指出下列代码的缺陷&#xff08; &#xff09;【多选】 float f[10]; // 假设这里有对f进行初始化的代码 for(int i 0; i < 10;) {if(f[i] 0)break; } A: for(int i 0; i < 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是…

C++初阶--类与对象--const成员和日期类的实现

文章目录 const 成员对一个日期类的实现源码解析构造函数的验证运算符的重复利用前置与后置其他运算符的验证 const 成员 将const修饰的成员函数称之为const成员函数。 在一个成员函数里面&#xff0c;对于this指针指向的对象&#xff0c;是隐藏式的&#xff0c;没有办法用常规…

B-DS二叉树_输出所有目标路径

Description 给定二叉树和一个整数目标targetSum&#xff0c;输出所有从根结点到叶子结点的路径总和等于targetSun的路径。 Input 第一行输入t&#xff0c;表示有t个测试样例。 第二行起&#xff0c;每一行首先输入一个整数targetSum&#xff0c;接着输入n&#xff0c;接着输…

带你拿捏链表

本专栏内容为&#xff1a;数据结构学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握数据结构。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;数据结构 &#x1f69a;代码仓库&#xff1a;小小u…

Mega Sales购物季营销,掌握流量密码不是事

“Mega Sales”购物季是东南亚地区“双十一、双十二”的两个重要节点&#xff0c;在年末即将来临之际&#xff0c;全球电商市场都正进入激动人心的备货大卖时期。面对这样的重要节目&#xff0c;商家应该如何做好营销铺垫&#xff0c;全面备战大促的不同阶段&#xff1f; 作为…

C生万物 | 从浅入深理解指针【第三部分】(qsort的使用和模拟实现)

C生万物 | 从浅入深理解指针【第四部分】&#xff08;qsort的使用和模拟实现&#xff09; 文章目录 C生万物 | 从浅入深理解指针【第四部分】&#xff08;qsort的使用和模拟实现&#xff09;回调函数是什么&#xff1f;qsort使用举例qsort函数的模拟实现 回调函数是什么&#x…

网络层:控制平面

路由选择算法 路由选择算法就是为了在端到端的数据传输中&#xff0c;选择路径上路由器的最好的路径。通常&#xff0c;一条好的路径指具有最低开销的路径。最低开销路径是指源和目的地之间具有最低开销的一条路。 根据集中式还是分散式来划分 集中式路由选择算法&#xff1a…

从UEFI如何启动到系统

从UEFI如何启动到系统 文章目录 从UEFI如何启动到系统UEFI须知1. 进入UEFI setup界面2. Setup界面3. BootManager界面4. Shell下操作4.1. 显示启动设备4.2. 进入设备及查看文件4.3. UEFI下的其他操作4.4. UEFI下的一些Shell命令 5. UEFI下更新固件方法GRUBGRUB界面1. 编辑GRUB选…

为什么搭建自己的帮助中心很重要?

在当今数字化和信息爆炸的时代&#xff0c;用户对产品和服务的期望越来越高。他们希望能够快速找到解决问题的方法和答案&#xff0c;而不是在不尽其穷的文档和论坛中浪费时间。在这样的背景下&#xff0c;建立一个完善的帮助中心成为了企业提供优质客户支持的关键。帮助中心不…

VSCode 连接不上 debian 的问题

之前一台笔记本上安装了 debian12&#xff0c;当时用 vscode 是可以连接上的&#xff0c;但今天连接突然就失败了&#xff0c;失败信息是这样的&#xff1a; 查看失败信息 因为 debian 是自动获取 ip 地址的&#xff0c;以前能连接上时&#xff0c;ip 地址是 104&#xff0c;然…

【免费生产力工具】CodeGeeX: AI代码自动补齐、对话、自动注释

CodeGeeX - A Multilingual Code Generation Tool - CodeGeeX 这个是官网&#xff0c;工程好像是开源的&#xff0c;生态不错。清华校友确实强&#xff0c;我是菜菜。 我是在vscode里面装的插件&#xff0c;直接搜索就行。 多的就不bb了&#xff0c;大家试试吧&#xff0c;确…

[强网杯 2019]随便注1

打开题目 输入1 输入1&#xff0c;页面报错&#xff0c;输入1 #页面正常 说明1为注入点且注入方式为字符型的单引号注入 判断列名 输入 1 order by 2 # 页面正常 1 order by 3 #页面报错 说明列名字段数为2 接下来我们尝试用联合注入的方式爆出数据显示位 输入1 union s…

Java生成word文档

一 前言 Java编程生成word文档这种操作一般是常规操作比较常见&#xff0c;主要采用Apache的POI Word 这个库操作的比较多&#xff0c;还有的用Spire.Doc&#xff0c;但是这个库有些稍微难点的功能要收费&#xff0c;看了下费用还不低&#xff0c;周末朋友问起是否有用java操作…

Linux - 守护进程的概念

Linux下的守护进程是在后台运行的特殊进程&#xff0c;它不与任何终端关联&#xff0c;通常在系统启动时自动启动&#xff0c;运行在后台并且不受用户登录或注销的影响。Linux 下的守护进程通常是以系统管理员的权限运行&#xff0c;用来执行一些系统任务&#xff0c;例如监控硬…

【RabbitMQ】RabbitMQ 集群的搭建 —— 基于 Docker 搭建 RabbitMQ 的普通集群,镜像集群以及仲裁队列

文章目录 一、集群分类1.1 普通模式1.2 镜像模式1.3 仲裁队列 二、普通集群2.1 目标集群2.2 获取 Erlang Cookie2.3 集群配置2.4 启动集群2.5 测试集群 三、镜像模式3.1 镜像模式的特征3.2 镜像模式的配置3.2.1 exactly 模式3.2.2 all 模式3.2.3 nodes 模式 3.3 测试镜像模式 四…

北大软微2024推免拟录取名单及分析

拟录取名单 直博生 硕士生 分析 北大软微在2023年的推免中共录取直博生17人&#xff0c;硕士生205人&#xff0c;其中硕士生全为专硕电子信息 当然&#xff0c;从录取结果咱们可以看出来&#xff0c;除了985和强势211&#xff0c;中国地质&#xff08;北京&#xf…

基于人工大猩猩部队算法的无人机航迹规划-附代码

基于人工大猩猩部队算法的无人机航迹规划 文章目录 基于人工大猩猩部队算法的无人机航迹规划1.人工大猩猩部队搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用人工大猩猩部队算法…

解决:GnuTLS recv error (-110): The TLS connection was non-properly terminated.

fatal: 无法访问 https://github.com/facebookresearch/fvcore/&#xff1a;GnuTLS recv error (-110): The TLS connection was non-properly terminated. error: subprocess-exited-with-error 关闭梯子&#xff0c;再试一次就好了

web前端——HTML+CSS实现奥运五环

web前端——HTMLCSS实现奥运五环 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…