正则表达式:贪婪匹配与非贪婪匹配

正则表达式:贪婪匹配与非贪婪匹配

非贪婪匹配

.*?这三个字符的组合就是非贪婪匹配,意思是匹配任意字符直到遇到第一个后面指定的字符,比如.*?_就表示匹配任意字符直到碰到下划线,还可以组合^来表示从头匹配,比如^.*?_就是从头开始匹配任意字符直到遇到第一个下划线。

举个例子

x <- c("apple_banana_cherry", "dog_cat", "red_blue_green")

使用 sub() 函数进行替换

result <- sub("^.*?_", "", x)

结果应该是 "banana_cherry" "cat" "blue_green"

^.*?_匹配到第一个下划线之前的所有字符,^表示从开头匹配。

贪婪匹配

.*在正则表达式中表示贪婪匹配,其中.是一个元字符,在正则表达式里,它代表除换行符之外的任意单个字符。* 是一个量词,它表示前面的元素(这里指 .)可以出现零次或多次。

所以,.* 组合起来的意思是匹配任意数量(包括零个)的任意字符。它会尽可能多地匹配字符,也就是所谓的 "贪婪匹配"。

举个例子

x <- c("apple_banana_cherry", "dog_cat", "red_blue_green")

result <- sub(".*_", "", x)

因为 sub(".*", "", x)函数表示把指定部分替换成空字符也就是删除正则表达式匹配到的部分,后面有一个,.*就是匹配到最后一个,前面的所有字符。

此时的result应该是"cherry" "cat" "green"

相关推荐
oort1233 分钟前
VLStream 全开源决策式 AI 视频平台 技术视角完整说明
大数据·开发语言·人工智能·经验分享·python·开源·音视频
Cloud_Shy6184 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第二章 Item 10 - 12)
c语言·开发语言·网络·人工智能·windows·python·编辑器
Xeon_CC6 分钟前
vs2026远程开发debian12容器的C++程序笔记
开发语言·c++·笔记
肖爱Kun7 分钟前
GB28181启动传参的设计
linux·服务器·数据库
小小王app小程序开发8 分钟前
场馆预约小程序开发玩法分析:智慧场馆新玩法,轻松实现无人化高效运营
大数据
水无痕simon8 分钟前
9 C语言的基础练习
c语言·开发语言·算法
少司府10 分钟前
C++进阶:二叉搜索树
开发语言·数据结构·c++·二叉树·stl·二叉搜索树·tree
iNeuOS工业互联网11 分钟前
iNeuOS_AiInsight·数智灵鉴(Text2SQL/NL2SQL自然语言大模型智能问数),免费下载试用
大数据·数据库·人工智能·智能制造·工业互联网·ineuos
Database_Cool_12 分钟前
MySQL 数据分析慢怎么办?迁移到阿里云 AnalyticDB MySQL 实现百倍加速
数据仓库·mysql·阿里云·数据分析
chatexcel12 分钟前
ChatExcel Max 2.0发布:支持公式样式保留与无限制文件数据分析
数据挖掘·数据分析