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

大家好,我是[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.rhkb.cn/news/181247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

torch.cuda.OutOfMemoryError: CUDA out of memory.

训练清华ChatGLM-6B时报错, 原因是显存不够 torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 96.00 MiB (GPU 0; 23.70 GiB total capacity; 4.37 GiB already allocated; 64.81 MiB free; 4.37 GiB reserved in total by PyTorch) If reserved memory is…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境: 昆腾存储,MAC OS操作系统,存放视频类数据(MXF、MOV等格式文件)。 XSAN故障&检测: 将存储空间从XSAN架构迁移到STORNEXT架构后,存储空间中数据全部丢失。 故障存储中一共…

嵌入式中如何将BootLoader与APP合并成一个固件

1、前言 嵌入式固件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用程序。 因此,在发布固件的时候,会存在BootLoader固件…

该酷的酷该飒的飒~质感满满的羊羔绒皮外套

皮毛一体材质柔软舒适 保暖性能极佳 冬天穿也不惧严寒的哦 宽松版型,对身材的包容性很强 外套的细节处理也非常出色,车缝线整齐 纽扣和拉链质量也是很不错的哟

【入门Flink】- 05Flink运行时架构以及一些核心概念

系统架构 Flink运行时架构Standalone会话模式为例 1)作业管理器(JobManager) JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。 JobManger 又包含…

全球首例无液氦脑磁图辅助下的胶质瘤切除手术顺利完成

近日,在国家重点研发计划“新型无液氦脑磁图系统研发”项目支持下,首都医科大学附属北京天坛医院季楠教授团队完成全球首例无液氦脑磁图运动功能区定位辅助下的胶质瘤切除手术。 手术对一例肿瘤累及运动功能区的年轻女性在术前分别利用无液氦脑磁图仪和功…

Java继承:抽取相同共性,实现代码复用

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、继承的概念二、继承的语法三、父类成员访问1、子类中访问父类成员变量Ⅰ、子类和父类不存在同名成员变量Ⅱ、子类和父类成员…

mysql:B+树/事务

B树 : 为了数据库量身定做的数据结构 我们当前这里的讨论都是围绕 mysql 的 innodb 这个存储引擎来讨论的 其他存储引擎可能会用到hash 作为索引,此时就只能应对这种精准匹配的情况了 要了解 B树 我们先了解 B树, B树 是 B树 的改进 B树 有时候会写作 B-树 (这里的" -…

Rust编程基础核心之所有权(上)

1.什么是所有权? Rust 的核心功能(之一)是 所有权(ownership)。虽然该功能很容易解释,但它对语言的其他部分有着深刻的影响。 所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制&#x…

pytorch+LSTM实现使用单参数预测,以及多参数预测(代码注释版)

开发前准备: 环境管理:Anaconda python: 3.8 显卡:NVIDIA3060 pytorch: 到官网选择conda版本,使用的是CUDA11.8 编译器: PyCharm 简述: 本次使用seaborn库中的flights数据集来做试验,我们通过…

ConnectionError: HTTPSConnectionPool

ConnectionError: HTTPSConnectionPool(host‘zbbfxstatic.figtingdream.com’, port443): Max retries exceeded with url: /api/cache (Caused by NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x00000249795AD9A0>: Failed to establish a ne…

游戏开发中的“御用中介“

点击上方亿元程序员关注和★星标 引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 游戏开发中的"御用…

【Redis】String字符串类型-常用命令

文章目录 String字符串类型常用命令setgetMGETMSET 计数命令INCRINCRBYDECRDECRBYINCRBYFLOAT 其它命令APPENDGETRANGESETRANGESTRLEN 命令总结 String字符串类型 1&#xff09;⾸先Redis中所有的键的类型都是字符串类型 2&#xff09;字符串类型的值&#xff08;value&#…

2.2整式的加减(第1课时)——合并同类项教学及作业设计

【学习目标】 1&#xff0e;理解同类项的概念&#xff0c;并能正确辨别同类项&#xff0e; 2&#xff0e;理解合并同类项的依据是乘法分配律&#xff0c;掌握合并同类项的方法&#xff0e; 知识点归纳&#xff1a; ★合并同类项后&#xff0c;所得的项的系数是___________…

Linux学习第28天:Platform设备驱动开发(二): 专注与分散

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、硬件原理图分析 四、驱动开发 1、platform设备与驱动程序开发 53 /* 54 * 设备资源信息&#xff0c;也就是 LED0 所使用的所有寄存器 55 */ 56 static str…

堆叠注入 [GYCTF2020]Blacklist1

打开题目 判断注入点 输入1&#xff0c;页面回显 输入1 页面报错 输入 1 # 页面正常&#xff0c;说明是单引号的字符型注入 我们输入1; show databases; # 说明有6个数据库 1; show tables; # 说明有三个表 我们直接查看FlagHere的表结构 1;desc FlagHere&#xff1b;# 发…

【Hadoop】Apache Hadoop YARN

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01; 目录 一、YARN概述 二、YARN基础架构 2.1 ResourceManager&#x…

[100天算法】-有序矩阵中第K小的元素(day 58)

题目描述 给定一个 n x n 矩阵&#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第 k 小的元素。 请注意&#xff0c;它是排序后的第 k 小元素&#xff0c;而不是第 k 个不同的元素。示例&#xff1a;matrix [[ 1, 5, 9],[10, 11, 13],[12, 13, 15] ], k …

基础知识:位运算

基础知识&#xff1a;位运算 1. 两类表达式 1. 两类表达式

展开一个结构加法等式

4a6 4a8 - - - - - 1 - 1 - - - 1 - 1 - - 1 - - 1 - - 1 - - 1 - - - - 在5-1的方向上具体展开4a64a8 25 19 19 19 19 19 19 19 25 19 19 19 19 19 19 19 1 10 10 10 10 10 10 10 1 10 10 10 10 10 10 10 …