R语言正则提取字符串换行符\n前文本及对应首尾单词
R语言提取指定位置文本实现方法
基础需求:提取首次出现换行符\n之前的所有文本
实现逻辑很直接:定位字符串中第一个换行符的位置,截取该位置之前的全部子串即可,有两种常用写法:
- 纯基础R实现,无需安装额外包
# 定义测试字符串 string <- "Stack Overflow\nIs a great website for asking programming questions\nOther Info" # 提取第一个换行前的文本 first_line <- substr( x = string, start = 1, stop = regexpr("\n", string)[1] - 1 ) # 打印结果验证 first_line # 输出: [1] "Stack Overflow"
- stringr包实现(适合日常tidyverse工作流,代码更简洁)
# 加载stringr包,未安装可先运行 install.packages("stringr") library(stringr) first_line <- str_extract(string, "^[^\n]+")
两种写法输出完全一致,符合预期结果。
扩展需求:提取首个单词 + 首个换行符前的最后一个单词
实现逻辑:先拿到第一个换行前的整行文本,再按空白字符拆分单词,取拆分结果的第一个和最后一个元素拼接即可。
# 定义扩展场景测试字符串 string2 <- "Stack Overflow Dot Com\nIS a great website for asking programming questions\nOther Info" # 第一步:提取第一行文本 first_line2 <- str_extract(string2, "^[^\n]+") # 第二步:按空白拆分单词,取首尾拼接 word_list <- str_split(first_line2, "\\s+", simplify = TRUE) target_res <- paste(word_list[1,1], word_list[1,ncol(word_list)]) # 打印结果验证 target_res # 输出: [1] "Stack Com"
纯基础R的扩展实现写法:
first_line2_base <- substr(string2, 1, regexpr("\n", string2)[1] -1) word_list_base <- strsplit(first_line2_base, "\\s+")[[1]] target_res_base <- paste(word_list_base[1], word_list_base[length(word_list_base)]) # 输出同样为 "Stack Com"
注:如果待处理字符串本身不含换行符,上述方法会直接返回完整字符串,不会抛出异常。
内容的提问来源于stack exchange,提问作者Brigadeiro
相关产品推荐
相关产品推荐

