我正在平衡R的几个版本,并希望根据哪个R和我正在使用的操作系统来更改我的R库.因此,我想坚持使用基本R功能.
我正在阅读此页面以查看基本R的等价stringr::str_extract物:
http://stat545.com/block022_regular-expression.html
它建议我可以复制这个功能grep.但是,grep如果匹配,我还没有做更多的事情而不是返回整个字符串.这可能是grep单独的,还是我需要将它与另一个功能结合起来?在我的情况下,我试图区分CentOS版本6和7.
grep(pattern = "release ([0-9]+)", x = readLines("/etc/system-release"), value = TRUE)
Run Code Online (Sandbox Code Playgroud)
G. *_*eck 13
1)strcapture如果你想从"release 1.2.3"使用base中提取一串数字和点
x <- "release 1.2.3"
strcapture("([0-9.]+)", x, data.frame(version = character(0)))
## version
## 1 1.2.3
Run Code Online (Sandbox Code Playgroud)
2)regexec/regmatches还有regmatches,regexec但已经在另一个答案中涵盖了.
3)sub通常也可以使用sub:
sub(".* ([0-9.]+).*", "\\1", x)
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
3a)如果您知道比赛在开头或结尾,则删除之后或之前的所有内容:
sub(".* ", "", x)
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
4)gsub有时我们知道要提取的字段具有某些字符,并且它们不会出现在其他地方.在这种情况下,只需删除不能在字符串中的每个字符的每个匹配项:
gsub("[^0-9.]", "", x)
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
5)read.table通常可以将输入分解为字段,然后通过数字或通过选择所需的输入grep. strsplit,read.table或scan可以使用:
read.table(text = x, as.is = TRUE)[[2]]
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
5a)grep/scan
grep("^[0-9.]+$", scan(textConnection(x), what = "", quiet = TRUE), value = TRUE)
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
5b)grep/strsplit
grep("^[0-9.]+$", strsplit(x, " ")[[1]], value = TRUE)
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
6)substring如果我们知道字段的字符位置,我们可以substring像这样使用:
substring(x, 9)
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
6a)substring/regexpr或者我们可以用来regexpr为我们找到角色位置:
substring(x, regexpr("\\d", x))
## [1] "1.2.3"
Run Code Online (Sandbox Code Playgroud)
7)read.dcf有时可以将输入转换为dcf形式,在这种情况下可以读取read.dcf.这些数据属于这种形式name: value
read.dcf(textConnection(sub(" ", ": ", x)))
## release
## [1,] "1.2.3"
Run Code Online (Sandbox Code Playgroud)