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

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

非贪婪匹配

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

举个例子

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"

相关推荐
Hello.Reader4 分钟前
用 Table ID 驯服异构库Flink CDC 跨系统表映射的工程化实践
大数据·flink
腾讯云数据库5 分钟前
「腾讯云NoSQL」技术之Redis篇:精准围剿rehash时延毛刺实践方案揭秘
数据库
古城小栈8 分钟前
Go 1.25 发布:性能、工具与生态的全面进化
开发语言·后端·golang
@syh.21 分钟前
【C++】map和set
开发语言·c++
黄雪超23 分钟前
Paimon——官网阅读:理解文件
大数据·数据湖·paimon
拾光Ծ31 分钟前
C++11实用的“新特性”:列表初始化+右值引用与偷懒艺术——移动语义
开发语言·c++
ZhengEnCi35 分钟前
S2B-SQL UPDATE 更新数据完全指南-99%的人忘记WHERE子句,SQL高手却这样写:从基础语法到多表关联的数据修改利器
数据库·sql
何憶树之長青36 分钟前
Kernel
开发语言·php
hardmenstudent36 分钟前
Python字典--第1关:元组使用:这份菜单能修改吗?
开发语言·python
xcLeigh36 分钟前
融合数据库时代:金仓 “五个一体化” 架构重塑数据管理新范式
数据库