我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串(可以是任何东西).例如,我有一个字符串:

a<-" anything goes here, STR1 GET_ME STR2, anything goes here"

我需要提取STR1和STR2之间的字符串GET_ME(不带空格).

我try 了str_extract(a, "STR1 (.+) STR2")次,但我得到了整场比赛

[1] "STR1 GET_ME STR2"

我当然可以go 掉已知的字符串,以隔离我需要的子字符串,但我认为应该有一种更干净的方法,通过使用正确的正则表达式来做到这一点.

推荐答案

您可以使用str_matchSTR1 (.*?) STR2(注意空格是"有意义的",如果您只想匹配STR1STR2之间的任何内容,请使用STR1(.*?)STR2,或者使用STR1\\s*(.*?)\\s*STR2来修剪所需的值).如果有多次出现,请使用str_match_all.

此外,如果需要匹配跨越换行符/换行符的字符串,请在模式的开头添加(?s):(?s)STR1(.*?)STR2/(?s)STR1\\s*(.*?)\\s*STR2.

library(stringr)
a <- " anything goes here, STR1 GET_ME STR2, anything goes here"
res <- str_match(a, "STR1\\s*(.*?)\\s*STR2")
res[,2]
[1] "GET_ME"

使用base R regexec的另一种方法(获得第一个匹配):

test <- " anything goes here, STR1 GET_ME STR2, anything goes here STR1 GET_ME2 STR2"
pattern <- "STR1\\s*(.*?)\\s*STR2"
result <- regmatches(test, regexec(pattern, test))
result[[1]][2]
[1] "GET_ME"

R相关问答推荐

生成具有受控相关性的x和y

R图中的字体大小和字体样式(带有R底图)

过滤Expand.Grid的结果

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

将模拟变量乘以多个观测结果中的模拟变量

如何在R中正确对齐放射状图中的文本

从有序数据中随机抽样

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

如何自定义Shapviz图?

用derrr在R中查找组间的重复项

如何使用R对每组变量进行随机化?

将非重复序列高效转换为长格式

如何直接从Fortran到R的数组大小?

使用across,starts_with和ifelse语句变更多个变量

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

注释不会绘制在所有ggplot2面上

每行不同列上的行求和