R-获取第一次出现和最后一次出现之间的子字符串



我正在处理R中的长字符串,例如:

string <- "end of section. 3. LESSONS. The previous LESSONS are very important as seen in Figure 1. This text is also important. Figure 1: Blah blah blah".

我想提取第一次出现"LESSONS"和最后一次出现"Figure 1"之间的子字符串,如下所示:

"The previous LESSONS are very important as seen in Figure 1. This text is also important."

我尝试了以下操作,但它在最后一次出现"LESSONS"后返回子字符串,而不是第一次:

gsub(".*LESSONS (.*) Figure 1.*", "\1", string)
#[1] "are very important as seen in Figure 1. This text is also important."

也尝试了以下操作,但它在第一次出现"图1"后剪切了字符串,而不是最后一次:

library(qdapRegex)
ex_between(string, "LESSONS", "Figure 1")
#[[1]]
#[1] ". The previous LESSONS are very important as seen in"

如果有任何帮助,我将不胜感激!

你非常接近。使正则表达式在"LESSONS"之前的不贪婪,使其与第一个正则表达式匹配。

此外,在这里您只能使用sub而不能使用gsub

sub(".*?LESSONS\.\s*(.*) Figure 1.*", "\1", string)
#[1] "The previous LESSONS are very important as seen in Figure 1. This text is also important."

您可以使用包stringr中的str_extract,以及(?<=...)中的正向后向查找和(?=...)中的正向前向查找来定义字符串中定义要提取的部分的部分:

str_extract(string, "(?<=LESSONS\.\s).*(?=\sFigure 1)")
[1] "The previous LESSONS are very important as seen in Figure 1. This text is also important."

最新更新