You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中提取两个指定单词之间的所有字符串?

在R中提取right和left之间的字符的实现方法

嘿,这个需求用正则表达式就能轻松解决!下面给你两种常用的实现方式,不管是用基础R还是流行的stringr包都能搞定:

方法一:使用基础R的正则工具

基础R里的regmatches搭配gregexpr就能完成这个任务,代码如下:

# 定义原始字符串
string <- c("righttoleftrightandleft")

# 正则匹配提取目标内容
matches <- regmatches(string, gregexpr("(?<=right).*?(?=left)", string, perl = TRUE))[[1]]

# 赋值给results变量
results <- matches
# 查看结果
results
# 输出: [1] "to"  "and"

这里的正则表达式(?<=right).*?(?=left)的作用:

  • (?<=right):正向肯定预查,确保匹配的内容前面是right
  • .*?:非贪婪模式匹配任意字符(避免从第一个right匹配到最后一个left)
  • (?=left):正向肯定预查,确保匹配的内容后面是left
  • 加上perl = TRUE是为了让R支持这种预查语法

方法二:使用stringr包(更简洁直观)

stringr是tidyverse家族里处理字符串的利器,语法更友好:

# 先加载包(如果没安装的话先运行 install.packages("stringr"))
library(stringr)

string <- c("righttoleftrightandleft")

# 直接提取所有匹配的内容
results <- str_extract_all(string, "(?<=right).*?(?=left)")[[1]]

# 查看结果
results
# 输出: [1] "to"  "and"

str_extract_all会一次性提取所有符合规则的子串,因为原始字符串是长度为1的向量,所以取[[1]]就能得到我们需要的字符向量。

需要注意的是,一定要用非贪婪匹配的.*?,如果写成贪婪匹配的.*,会得到"toleftrightand"这个不符合预期的结果哦!

内容的提问来源于stack exchange,提问作者Fouad Selmane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:33:55