5

重複の可能性:
R(正規表現)のすべての括弧内の情報を抽出します

Excelからデータをインポートしましたが、1つのセルは数字と文字を含むこれらの長い文字列で構成されていますが、その文字列から数字のみを抽出して新しい変数に格納する方法はありますか?残念ながら、一部のエントリには2セットの角かっこがあり、2つ目だけが必要ですか?そのためにgrepを使用できますか?

文字列は多かれ少なかれこのように見えますが、文字列の長さは異なります。

"East Kootenay C (5901035) RDA 01011"

またはこのように:

"Thompson-Nicola J (Copper Desert Country) (5933039) RDA 02020"

これから欲しいの59010355933039

ヒントや助けをいただければ幸いです。

4

2 に答える 2

10

これを行うための正規表現は多数あります。これが1つです:

x=c("East Kootenay C (5901035) RDA 01011","Thompson-Nicola J (Copper Desert Country) (5933039) RDA 02020")

> gsub('.+\\(([0-9]+)\\).+?$', '\\1', x)
[1] "5901035" "5933039"

その最初の式の構文を分解しましょう'.+\\(([0-9]+)\\).+'

  • .+1つまたは複数の何か
  • \\(括弧は正規表現の特殊文字なので、実際のものを表現したい場合は .(でエスケープする必要があり\ます。R のために再びエスケープする必要があります (したがって 2 つ\の s)。

  • ([0-9]+)特殊文字について言及しましたが、ここでは 2 つ使用します。1 つ目は、保持したいグループを示す括弧です。2 番目[]その周辺のグループ。詳細については、を参照?regexしてください。

  • ?$最後の部分は、コメントに記載されているように、括弧内の最後の数字のセットを取得していることを保証します。

親文字列が文字列の先頭または末尾にある場合は、1 つ以上の i ではなく 0 以上を意味する which*の代わりに使用することもできます。.

の 2 番目の部分はgsub、最初の部分を置き換えるものです。私が使用した: \\1. これは、グループ1を使用することを示しています(上記の内部のもの( )。正規表現用に1回、R用に1回、もう一度2回エスケープする必要があります.

確かに泥のように澄んでいます!データ変更プロジェクトをお楽しみください!

于 2012-10-04T20:42:40.170 に答える
3

gsubfn ソリューションは次のとおりです。

library(gsubfn)

strapplyc(x, "[(](\\d+)[)]", simplify = TRUE)

[(](\\d+)括弧に一致し、数字の文字列に一致し、周囲の括弧のために後方参照を作成し、最後に右括弧に[)]一致します。後方参照が返されます。

于 2012-10-04T23:00:41.027 に答える