regex - R:提取包含在两个子字符串之间的所有子字符串的最快方法

标签 regex r string substring

我正在寻找一种有效的方法来提取字符串中两个子字符串之间的所有匹配项。例如。说我想提取字符串之间包含的所有子字符串

start="strt"


stop="stp"
in string
x="strt111stpblablastrt222stp"

我想得到矢量
"111" "222"

在 R 中执行此操作的最有效方法是什么?也许使用正则表达式?或者有更好的方法吗?

最佳答案

对于像这样简单的事情,base R 处理得很好。

您可以打开 PCRE通过使用 perl=T并使用 lookaround断言。

x <- 'strt111stpblablastrt222stp'
regmatches(x, gregexpr('(?<=strt).*?(?=stp)', x, perl=T))[[1]]
# [1] "111" "222"

说明 :
(?<=          # look behind to see if there is:
  strt        #   'strt'
)             # end of look-behind
.*?           # any character except \n (0 or more times)
(?=           # look ahead to see if there is:
  stp         #   'stp'
)             # end of look-ahead

编辑:根据新语法更新了以下答案。

您也可以考虑使用 stringi 包。
library(stringi)
x <- 'strt111stpblablastrt222stp'
stri_extract_all_regex(x, '(?<=strt).*?(?=stp)')[[1]]
# [1] "111" "222"

rm_between来自 qdapRegex 包。
library(qdapRegex)
x <- 'strt111stpblablastrt222stp'
rm_between(x, 'strt', 'stp', extract=TRUE)[[1]]
# [1] "111" "222"

关于regex - R:提取包含在两个子字符串之间的所有子字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24773737/

相关文章:

r - 如何使用随机效应进行逐步模型(lme4 + lmerTest?)

r - 使用 R 将大型文本文件构建为数据框

javascript - JS正则表达式根据不以反斜杠开头的字符拆分字符串

r - 如何匹配R中两列之间的字符串?

regex - yii2 验证匹配正则表达式模式得到无效输入

php - 替换 PHP 中标记之间的许多代码行

c# - 应用 dd/mm/yyyy 格式通过正则表达式进行路由

Javascript 匹配改变不同数组的值

r - 防止 R igraph 添加零顶点

C# : Distinctions between various <string, 字符串> 集合