我有以下字符串:"PRODUCT colgate good but not goodOKAY"
我想提取PRODUCT
和OKAY
答案 0 :(得分:24)
可以使用sub
:
s <- "PRODUCT colgate good but not goodOKAY"
sub(".*PRODUCT *(.*?) *OKAY.*", "\\1", s)
,并提供:
[1] "colgate good but not good"
不需要包裹。
以下是正则表达式的可视化:
.*PRODUCT *(.*?) *OKAY.*
答案 1 :(得分:15)
您可以使用gsub
:
vec <- "PRODUCT colgate good but not goodOKAY"
gsub(".*PRODUCT\\s*|OKAY.*", "", vec)
# [1] "colgate good but not good"
答案 2 :(得分:14)
x = "PRODUCT colgate good but not goodOKAY"
library(stringr)
str_extract(string = x, pattern = perl("(?<=PRODUCT).*(?=OKAY)"))
(?<=PRODUCT)
- 查看PRODUCT
.*
匹配除新行之外的所有内容。
(?=OKAY)
- 展望未来匹配OKAY
。
我应该补充一下,不需要stingr
包,基本函数sub
和gsub
可以正常工作。我使用stringr来保证语法的一致性:无论是提取,替换,检测等,函数名称都是可预测和可理解的,并且参数的顺序是一致的。我使用stringr
因为它每次都不需要文档。
答案 3 :(得分:9)
您可以使用 qdapRegex 包中的rm_between
功能。它需要一个字符串和一个左右边界如下:
x <- "PRODUCT colgate good but not goodOKAY"
library(qdapRegex)
rm_between(x, "PRODUCT", "OKAY", extract=TRUE)
## [[1]]
## [1] "colgate good but not good"
答案 4 :(得分:1)
您可以使用软件包 unglue :
library(unglue)
x <- "PRODUCT colgate good but not goodOKAY"
unglue_vec(x, "PRODUCT {out}OKAY")
#> [1] "colgate good but not good"