R语言正则表达式:提取四位数字+QUARTER左侧子串方案
R语言正则提取解决方案
明确需求:从目标字符串中提取四位数字紧跟大写QUARTER左侧的内容,同时排除如"10RUNS FAST"或"QUICKER 1"这类不符合结构的字符串。
正则方案实现
方案1:用stringr包直接提取目标内容
library(stringr) text <- "ARC GUNNA SPARKYA 2011QUARTER HORSE." # 正向预查匹配目标结构左侧内容,非贪婪模式避免过度匹配 result <- str_extract(text, "^.*?(?=\\s+\\d{4}QUARTER)") # 清理末尾多余空格 result <- str_trim(result) print(result) # 输出:[1] "ARC GUNNA SPARKYA"
解释:
^.*?(?=\\s+\\d{4}QUARTER):从字符串开头开始,匹配到一个或多个空格+四位数字+QUARTER之前的所有内容,.*?确保只匹配到目标结构的前边界,不会多取。str_trim用于去除提取结果末尾残留的空格。
方案2:用基础R的gsub替换冗余部分
text <- "ARC GUNNA SPARKYA 2011QUARTER HORSE." # 替换掉从目标结构到字符串结尾的所有内容 result <- gsub("\\s+\\d{4}QUARTER.*$", "", text) # 清理首尾空格 result <- trimws(result) print(result) # 输出:[1] "ARC GUNNA SPARKYA"
解释:
\\s+\\d{4}QUARTER.*$精准匹配"空格+四位数字+QUARTER"及之后的全部内容,替换为空后留下需要的左侧字符串。trimws是基础R自带的空格清理函数。
验证非匹配场景
对于不符合四位数字+QUARTER结构的字符串,正则不会触发修改,保留原内容:
test1 <- "10RUNS FAST" test2 <- "QUICKER 1" gsub("\\s+\\d{4}QUARTER.*$", "", test1) # 输出:[1] "10RUNS FAST" gsub("\\s+\\d{4}QUARTER.*$", "", test2) # 输出:[1] "QUICKER 1"
内容的提问来源于stack exchange,提问作者Abe
相关产品推荐
相关产品推荐

