关于我们可以假设什么是已知的存在一些问题,但这里有一些变体可以做出各种假设。
1) word(这会删除第一个单词之前的所有内容,然后是括号。
- “^”匹配字符串的开头
- ".*?"是任何东西中最短的匹配,只要我们仍然匹配正则表达式的其余部分
- "\\w+" 匹配一个单词
- "\\(" 匹配左括号
- (...) 形成一个捕获组,替换字符串可以引用为“\\1”
代码
x <- "example.AL(5)._._4500_GRE/Jan_2018"
sub("^.*?(\\w+\\()", "\\1", x)
## [1] "AL(5)._._4500_GRE/Jan_2018"
1a) 或匹配一个后跟 ( 后跟任何内容的单词并提取:
library(gsubfn)
strapplyc(x, "\\w+\\(.*", simplify = TRUE)
## [1] "AL(5)._._4500_GRE/Jan_2018"
2) AL( 或者如果我们知道这个词是AL 那么:
sub("^.*?(AL\\(.*)", "\\1", x)
## [1] "AL(5)._._4500_GRE/Jan_2018"
3) 最多删除第一个点,或者如果我们知道要删除的部分是第一个点之前的部分(包括第一个点):
sub("^.*?\\.", "", x)
## [1] "AL(5)._._4500_GRE/Jan_2018"
4) 点分隔字段 如果输入的格式是点分隔字段,我们可以像这样一次将它们全部解析出来:
read.table(text = x, sep = ".", as.is = TRUE)
## V1 V2 V3 V4
## 1 example AL(5) _ _4500_GRE/Jan_2018