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

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

非贪婪匹配

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

举个例子

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"

相关推荐
Lx3526 分钟前
Flink vs Spark Streaming:谁更适合你的实时处理需求?
大数据
QYResearch8 分钟前
全球香水行业现状调研与发展前景预测(2025-2031年)
大数据
2503_9301239310 分钟前
Kubernetes (六)调度策略详解:从节点匹配到Pod调度全流程
java·开发语言
曾凡宇先生10 分钟前
openEuler安装jdk,nginx,redis
linux·开发语言·数据库·openeuler
weixin_466812 分钟前
Python编程之面向对象
开发语言·人工智能·python
QYResearch13 分钟前
全球与中国空气净化器市场规模前景
大数据
连线Insight18 分钟前
竞逐AI内容,爱奇艺先出手了
大数据·人工智能
点灯小铭23 分钟前
基于单片机的四沟道步进电机玉米补种机设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
YBN娜24 分钟前
设计模式-创建型设计模式
java·开发语言·设计模式
CoderCodingNo26 分钟前
【GESP】C++四级真题 luogu-B4040 [GESP202409 四级] 黑白方块
开发语言·c++