Rで正規表現 - RとLinuxと...

RとLinuxと...


Rで正規表現

Rの備忘録

_ 基本関数の機能

ex.txt <- c("青空文庫","青い鳥文庫")
  • nchar()
> nchar(ex.txt)
[1] 4 5
  • substr()
> substr(ex.txt, 1,3)
[1] "青空文" "青い鳥"
  • chartr()
> chartr("青い鳥","岩波", ex.txt)
以下にエラー chartr("青い鳥", "岩波", ex.txt) :
        'old' が 'new' より長いです 
> chartr("青","岩波", ex.txt)
[1] "岩空文庫"   "岩い鳥文庫"
  
  • strsplit()
> strsplit(ex.txt, "")
[[1]]
[1] "青" "空" "文" "庫"

[[2]]
[1] "青" "い" "鳥" "文" "庫"
  • grep()
> grep("鳥", ex.txt)
[1] 2
> grep("鳥", ex.txt, value = T)
[1] "青い鳥文庫"
  • regexpr()
> regexpr("鳥", ex.txt)
[1] -1  3              # -1 は該当なし
attr(,"match.length")
[1] -1  1              # 上記のベクトル(-1,3)の属性である.
> attributes(regexpr("鳥", ex.txt)) # 出力はリスト
$match.length
[1] -1  1
> attr( regexpr("鳥", ex.txt), "match.length") #出力はベクトル
[1] -1  1
  • gregexpr()
> gregexpr("文庫", ex.txt)
[[1]]
[1] 3
attr(,"match.length")
[1] 2

[[2]]
[1] 4
attr(,"match.length")
[1] 2
> unlist(gregexpr("文庫", ex.txt))
[1] 3 4
> sapply( gregexpr("文庫", ex.txt), attributes)
$match.length
[1] 2

$match.length
[1] 2

> sapply( gregexpr("文庫", ex.txt), attr, "match.length")
[1] 2 2
  • gsub()
> gsub("青", "赤", ex.txt)
[1] "赤空文庫"   "赤い鳥文庫"

_ 応用的な検索

 ex2.txt <- c("隣の客はよく柿食う客だ。",
              "すもももももももものうち。")
  • gsub()
> gsub("も.*も", "かき", ex2.txt)
[1] "隣の客はよく柿食う客だ。" "すかきのうち。"  
> gsub("(?U)も.*も", "かき", ex2.txt, perl = T)
[1] "隣の客はよく柿食う客だ。"   "すかきかきかきかきのうち。"     
> gsub("も.*?も", "かき", ex2.txt, perl = T)
[1] "隣の客はよく柿食う客だ。"   "すかきかきかきかきのうち。"
> gsub("も{1,4}", "かき", ex2.txt)
[1] "隣の客はよく柿食う客だ。" "すかきかきのうち。"
   > gsub("[ま-も]", ex2.txt) ## さすがにこれは無理
   以下にエラー gsub("[ま-も]", ex2.txt) : 
      要素 1 は空です; 
    'is.character' の引数リストの評価されていた部分は: 
    (x)
> gsub("(もも){1,4}", "もも", ex2.txt)
[1] "隣の客はよく柿食う客だ。" "すもものうち。"          
 
> gsub("\\w", "w",ex2.txt)
[1] "wwwwwwwwwww。"  "wwwwwwwwwwww。"
> gsub("\\w+", "w",ex2.txt)
[1] "w。" "w。"
>
> gsub("(客)", "お\\1さん",ex2.txt)
[1] "隣のお客さんはよく柿食うお客さんだ。"
[2] "すもももももももものうち。"          
>

_ lookaround

> gsub("す(?=もも)", "おい", ex2.txt , perl = T)
[1] "隣の客はよく柿食う客だ。"     "おいもももももももものうち。"
 
Link: Rの備忘録(1827d)
Last-modified: 2009-04-24 (金) 09:46:04 (3526d)