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た。1 つのアプローチを次に示します。

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 に答える