2016-05-19 15 views
1

Rソフトウェアを使用して文字列から語句を抽出することです。文字列で繰り返す語句を抽出するR

は同様の構造を有する文字列のセットを有する検討:文字列は、ブラケット(で始まり、他のブラケット)で閉じ、その間にそれは例えばコンマ,で分離いくつかの同一のフレーズを有します"(matrix,matrix,matrix)"。フレーズが何回繰り返されるかは、あらかじめわかっていないので、2 "(matrix,matrix)",3,4 "(matrix,matrix,matrix,matrix,)"などの繰り返しが可能です。通常は最大6までです。フレーズが1つのみの場合、それは(追加の)角括弧(例:"matrix"または"(matrix)")ではありません。

私が使用して1つのフレーズを抽出するための管理:

NAME <- "(matrix,matrix,matrix,matrix)" 
gsub("(\\()(.*,){1,}(.*)\\)", "\\3",NAME, perl = T) 

をしかしそこ、より高度な質問である:それはそれだけあればフレーズが繰り返された場合にどのように私は、をチェックすることができ、およびエキスそれ以外の場合はそのままにしておきますか?例えば。それはあなたのことが可能

答えて

3

を繰り返さないよう"(A,B,C)"は、そのままにしなければならない
しかし
"(matrix,matrix,matrix,matrix)"から"matrix""(A B,A B)"から
"A B""((A,B,C),(A,B,C),(A,B,C),(A,B,C))"から
"(A,B,C)"、および"(A,B,C,A,B,C,A,B,C,A,B,C)"から
"A,B,C"を抽出する方法使用

\((.+?)(?:,\1)+\) 
  • (.+?)開き丸括弧 - - グループ1改行以外の1文字以上の文字に一致する
  • (?:,\1)+から1以上の配列

    • \(

      regex demo

      パターンの説明を参照してください。 ,の後にGrouip1に取り込まれた値

    • \) - 閉じる丸いブラケット。

    Rのデモ:

    > s = "(matrix,matrix,matrix)" 
    > gsub("\\((.+?)(?:,\\1)+\\)", "\\1", s) 
    [1] "matrix" 
    > s = "(m,d,s)" 
    > gsub("\\((.+?)(?:,\\1)+\\)", "\\1", s) 
    [1] "(m,d,s)" 
    
  • +1

    は、特に説明のために、Wiktor第ありがとうございます:) – Vilmantas

    関連する問題