我有:
c("Enrolment in secondary school, private school")
Run Code Online (Sandbox Code Playgroud)
我想要
c("secondary school)
Run Code Online (Sandbox Code Playgroud)
Enrolment in第一个,是固定模式。
我对正则表达式一点也不熟悉。有人可以帮忙吗?
这里有一些替代方案。它们不使用任何包,并且如果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)
| 归档时间: |
|
| 查看次数: |
2676 次 |
| 最近记录: |