0

我想使用 R 提取 2 个匹配组。现在我有了这个,但效果不佳:

代码:

str = '123abc'
vector <- gregexpr('(?<first>\\d+)(?<second>\\w+)', str, perl=TRUE)
regmatches(str, vector)

结果:

[[1]]
[1] "123abc"

我希望结果是这样的:

[1] "123"
[2] "abc"
4

4 回答 4

2

我不确定您是否有使用 的特定原因regmatches,除非您以该格式导入表达式。如果定义明确的组对您的所有条目都是通用的,您可以通过以下方式匹配它们:

x <- "123abc"
sub("([[:digit:]]+)[[:alpha:]]+","\\1",x)
sub("[[:digit:]]+([[:alpha:]]+)","\\1",x)

结果

[1] "123"
[1] "abc"

即,匹配字符串的整个结构,然后将其替换为要保留的部分,方法是将其括在圆括号中并用反向引用(“\\1”)引用它。

于 2012-11-24T20:38:16.593 回答
1

我已重命名您的字符串s以避免破坏str。这是一种方法:

library(stringr)
s <- '123abc'
reg <- '([[:digit:]]+)([[:alpha:]]+)'

complete <- unlist(str_extract_all(s, reg))
partials <- unlist(str_match_all(s, reg))
partials <- partials[!(partials %in% complete)]

partials
[1] "123" "abc"
于 2012-11-24T20:26:46.080 回答
0

尝试这个:

> library(gsubfn)
> strapplyc("123abc", '(\\d+)(\\w+)')[[1]]
[1] "123" "abc"
于 2012-11-25T04:23:24.350 回答
0

根据输入的结构如何,您可能希望使用它strsplit来拆分字符串。

文档在这里

于 2012-11-24T18:55:26.440 回答