gpt4 book ai didi

r - 如何用基础 R 做 str_extract ?

转载 作者:行者123 更新时间:2023-12-04 05:28:37 25 4
gpt4 key购买 nike

我正在平衡多个版本的 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)

最佳答案

1) strcapture 如果你想从 "release 1.2.3" 中提取一串数字和点然后使用基础

x <- "release 1.2.3"
strcapture("([0-9.]+)", x, data.frame(version = character(0)))
## version
## 1 1.2.3

2) regexec/regmatches 还有 regmatchesregexec但这已经包含在另一个答案中。

3) 子 通常也可以使用 sub :
sub(".* ([0-9.]+).*", "\\1", x)
## [1] "1.2.3"

3a) 如果您知道匹配是在开始或结束,则删除它之后或之前的所有内容:
sub(".* ", "", x)
## [1] "1.2.3"

4) gsub 有时我们知道要提取的字段有某些字符,它们不会出现在其他地方。在这种情况下,只需删除不能出现在字符串中的每个字符的每次出现:
gsub("[^0-9.]", "", x)
## [1] "1.2.3"

5) 读表人们通常可以将输入分解为字段,然后通过数字或通过 grep 挑选出所需的字段。 . strsplit , read.tablescan可以使用:
read.table(text = x, as.is = TRUE)[[2]]
## [1] "1.2.3"

5a) grep/扫描
grep("^[0-9.]+$", scan(textConnection(x), what = "", quiet = TRUE), value = TRUE)
## [1] "1.2.3"

5b) grep/strsplit
grep("^[0-9.]+$", strsplit(x, " ")[[1]], value = TRUE)
## [1] "1.2.3"

6) 子串 如果我们知道字段的字符位置,我们可以使用 substring像这样:
substring(x, 9)
## [1] "1.2.3"

6a) 子字符串/正则表达式 或者我们可以使用 regexpr为我们定位字符位置:
substring(x, regexpr("\\d", x))
## [1] "1.2.3"

7) read.dcf 有时可以将输入转换为 dcf 形式,在这种情况下可以使用 read.dcf 读取。 .此类数据的格式为 name: value
 read.dcf(textConnection(sub(" ", ": ", x)))
## release
## [1,] "1.2.3"

关于r - 如何用基础 R 做 str_extract ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com