删除字符串的开头和结尾

cim*_*daj 1 r

我有:

c("Enrolment in secondary school, private school")
Run Code Online (Sandbox Code Playgroud)

我想要

c("secondary school)
Run Code Online (Sandbox Code Playgroud)

Enrolment in第一个,是固定模式。

我对正则表达式一点也不熟悉。有人可以帮忙吗?

G. *_*eck 5

这里有一些替代方案。它们不使用任何包,并且如果x是单个字符串或字符串向量,它们都可以工作((3)除外,它仅适用于单个字符串——(3a)是(3)的向量版本)。

他们使用这个输入:

x <- "Enrolment in secondary school, private school"
Run Code Online (Sandbox Code Playgroud)

1) gsub 这一次将前缀和后缀替换为空字符串:

gsub("Enrolment in |,.*", "", x)
## [1] "secondary school"
Run Code Online (Sandbox Code Playgroud)

2) sub这执行相同的操作,但在单独的sub调用中:

sub(",.*", "", sub("Enrolment in ", "", x))
## [1] "secondary school"
Run Code Online (Sandbox Code Playgroud)

2a) sub/substring由于我们知道前缀的长度,我们可以将其中一个sub调用替换为substring

sub(",.*", "", substring(x, 14))
## [1] "secondary school"
Run Code Online (Sandbox Code Playgroud)

3) strsplit 虽然通常不会使用此解决方案,但可以使用 strsplit,如下所示:

strsplit(x, "Enrolment in |,.*")[[1]][2]
## [1] "secondary school"
Run Code Online (Sandbox Code Playgroud)

3a)将 (3) 推广到字符串向量:

sapply(strsplit(x, "Enrolment in |,.*"), "[", 2)
## [1] "secondary school"
Run Code Online (Sandbox Code Playgroud)

4) read.table 这用逗号替换前缀,然后通过read.table选取第二列将其读取为逗号分隔的字段:

read.table(text = sub("Enrolment in ", ",", x), sep = ",", as.is = TRUE)[[2]]
## [1] "secondary school"
Run Code Online (Sandbox Code Playgroud)