R における正規表現
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
COLOR(magenta){SIZE(20){R における正規表現}}
// 間瀬茂 (2004/3/17)
~
~
R の正規表現とそれを用いる関数に付いて解説(ほとんどオンラ...
~
#contents
~
*R における正規表現
R の幾つかの関数はいわゆる正規表現(GNU grep に準ずる)を受...
例えば、COLOR(red){grep},COLOR(red){regexp},COLOR(red){su...
COLOR(red){gsub},COLOR(red){strsplit}。他にも関数 COLOR(r...
COLOR(red){browseEnv}, COLOR(red){help.search}, COLOR(red...
COLOR(red){ls} はオブジェクト・ファイル名等に関し正規表現...
** COLOR(magenta){詳細}
「正規表現 (regular expression)」は文字列のある集合を表す...
R では三種類の正規表現を使える。
-COLOR(red){grep(extended = TRUE)} で使われる「拡張正規表...
-COLOR(red){grep(extended = FALSE)} で使われる「基本正規...
-COLOR(red){grep(perl = TRUE)} で使われる「パール風正規表...
関数 apropos, browseEnv, help.search, list.files, ls, str...
拡張正規表現を用いる。strsplit は 'extended = FALSE' オプ...
基本正規表現を用いる。
以下で説明されるパターンは 'cat' で表示される仕方で記述さ...
COLOR(blue){R の文字列をキーボードから入力するには、バッ...
COLOR(blue){ を二重化 } COLOR(red){\\} COLOR(blue){ する...
**COLOR(magenta){拡張正規表現 (既定動作)}
POSIX 1003.2 標準に基づく GNU 移植を用いる。既定オプショ...
-正規表現は算術表現と同様、小さな部分表現を結合して得られる
--COLOR(magenta){基本的構成要素}は単一の文字にマッチする...
全てのアルファベット文字と数値は、それ自身にマッチする正...
--COLOR(magenta){メタ文字} 特殊な意味を持つメタ文字はその...
バックスラッシュ記号をおくことで表現される。メタ文字は CO...
--COLOR(magenta){文字クラス} COLOR(red){[} と COLOR(red){...
文字のリストは
COLOR(blue){その中のいずれの文字}ともマッチする
もし最初の文字がカレットCOLOR(red){^} ならば
COLOR(blue){そのリスト中に無い任意文字列}とマッチする。
最初と最後の文字をハイフンで結ぶとCOLOR(blue){文字の範囲}...
例
[0123456789] は任意の単一の数値とマッチ
[^abc] は文字 'a', 'b', 'c' 以外の全ての文字とマッチ
-幾つかの名前付き文字クラスが予め定義されている(ロケール...
--COLOR(red){[:alnum:]} アルファベットと数値、[:alpha:] +...
--COLOR(red){[:alpha:]} 大小文字アルファベット、 [:lower:...
--COLOR(red){[:lower:]} 小文字アルファベ
--COLOR(red){[:digit:]} 数値
--COLOR(red){[:blank:]} 空白文字、スペースとタブ
--COLOR(red){[:cntrl:]} 制御文字(000-037, 177('DEL')
--COLOR(red){[:graph:]} グラフィカル文字 ([:alnum:] と [:...
--COLOR(red){[:print:]} 印字可能な文字、[:alnum:] + [:pun...
--COLOR(red){[:punct:]} パンクチュエーション文字 COLOR(re...
--COLOR(red){[:space:]} 空白文字、タブ、改行、水平タブ、...
--COLOR(red){[:xdigit:]} 16進数 COLOR(red){0 1 2 3 4 5 6 ...
-注意
--COLOR(red){[[:alnum:]]} は COLOR(red){[0-9A-Za-z]} を意...
--ほとんどのメタ文字は鍵括弧リスト内では本来の意味を失う
--COLOR(red){]} を鍵括弧リストに入れる際は必ず最初におく
--COLOR(red){^} を鍵括弧リストに入れる際は最初以外の任意...
--COLOR(red){\} および上の二つの文字だけが鈎括弧リスト内...
--ピリオッド COLOR(red){.} は任意の単一文字にマッチする
--記号 COLOR(red){\w} は COLOR(red){[[:alnum:]]} と同義だ...
--COLOR(red){\W} は COLOR(red){\w} の否定(つまり英数字以外)
--COLOR(red){^} は COLOR(blue){先頭にある空文字列} にマッ...
つまり、それ以降の表現が文字列の先頭にあることを指示する。
--COLOR(red){$} は COLOR(blue){末尾にある空文字列} にマッ...
つまり、その直前の表現が文字列の末尾にあることを指示する。
--COLOR(red){\<} は COLOR(blue){単語の先頭にある空文字列}...
--COLOR(red){\>} は COLOR(blue){単語の末尾にある空文字列}...
--COLOR(red){\b} は COLOR(blue){単語の境界にある空文字列}...
--COLOR(red){\B} は COLOR(red){単語の境界にない空文字列} ...
-繰返し指示 (正規表現の後に置き、その繰返しを表現する)
--COLOR(red){?} 直前の項目はオプションであり、零回もしく...
--COLOR(red){*} 直前の項目を零回もしくは一回以上繰り返す
--COLOR(red){+} 直前の項目を一回以上繰り返す
--'{n}' 直前の項目をちょうど n 回繰り返す
--'{n,}' 直前の項目を n 回以上繰り返す
--'{n,m}' 直前の項目を n 回以上、最大 m 回繰り返す
-注意
--繰返しはマッチング可能な最大回数行なわれる
--二つの表現は連結することができ、結果は各表現にマッチす...
--二つの表現を COLOR(red){|} で並べると、各表現の一方にマ...
例:abba|cde は abba か cde にマッチ
--繰返し指示は連結指示に優先し、連結指示は選択指示に優先...
例:(abba|cde)* と abba|cde* はことなる意味を持つ
--COLOR(red){\N} (N は単一の数字) はそれまでにマッチした ...
** COLOR(magenta){基本正規表現}
オプション COLOR(magenta){extended = FALSE} が使われた時...
~
基本正規表現ではメタ文字 COLOR(red){? + { | ( )} はその特...
COLOR(red){. \ [ ^ $ *} になる。
** COLOR(magenta){Perl 式正規表現}
オプション COLOR(magenta){perl = TRUE} は Perl 5 互換の正...
詳細は Perl 文献を参照。
*正規表現が使える関数 COLOR(red){grep}, COLOR(red){regexp...
**COLOR(magenta){用法}
-文字列ベクトル x 中から正規表現 pattern にマッチするもの...
--COLOR(red){grep(pattern, x, ignore.case = FALSE, extend...
--COLOR(red){ regexpr(pattern, text, extended = TRUE, pe...
-sub と gsub は文字列ベクトル x 中から正規表現 pattern に...
--COLOR(red){sub(pattern, replacement, x, ignore.case = F...
--COLOR(red){gsub(pattern, replacement, x, ignore.case = ...
**COLOR(magenta){引数}
-COLOR(red){pattern} 与えられた文字列ベクトルとマッチング...
-COLOR(red){x}, COLOR(red){text} マッチングの対象である文...
-COLOR(red){ignore.case} もし COLOR(blue){FALSE} ならマッ...
-COLOR(red){extended} もし COLOR(blue){TRUE} なら拡張正規...
-COLOR(red){perl} 論理値。もし可能ならパール互換の正規表...
-COLOR(red){value} もし COLOR(blue){FALSE} なら grep で決...
-COLOR(red){fixed} 論理値。もし COLOR(blue){TRUE} なら CO...
-COLOR(red){replacement} COLOR(blue){sub} と COLOR(blue)...
**COLOR(magenta){詳細}
-二つの COLOR(blue){*sub} 関数は、COLOR(blue){sub} が最初...
-COLOR(blue){regexpr} では COLOR(blue){pattern} が COLOR(...
-正規表現は COLOR(blue){extended} 引数の値に応じて、拡張...
**COLOR(magenta){返り値}
-COLOR(blue){grep} に対してパターンにマッチした COLOR(red...
-COLOR(blue){sub} と COLOR(blue){gsub} に対しては元の文字...
-COLOR(blue){regexpr} に対しては COLOR(blue){text} と同じ...
**その他の関連関数
*** COLOR(red){agrep} 近似的なマッチング
*** COLOR(red){tolower}, COLOR(red){toupper}, COLOR(red){...
*** COLOR(red){chartr} 文字列の変換
*** COLOR(red){charmatch}, COLOR(red){pmatch}, COLOR(red)...
*** COLOR(red){apropos} は regexpr を用いており、良い例を...
*** COLOR(red){ls}, COLOR(red){objects} はオブジェクトの...
*** COLOR(red){glob2rx} は Unix の ls 命令におけるような...
例 glob2rx("abc.*") -> "^abc\\."
glob2rx("a?b.*") -> "^a.b\\."
glob2rx("a?b.*", trim.tail=FALSE) -> "^a.b\\..*$"
glob2rx("*.doc") -> "^.*\\.doc$"
glob2rx("*.doc", trim.head=TRUE) -> "\\.doc$"
glob2rx("*.t*") -> "^.*\\.t"
glob2rx("*.t??") -> "^.*\\.t..$"
*幾つかの例
**例1 オブジェクトの検索 grep()
> z <- ls() # 現在のオブジェクトリスト(文字列ベクト...
> zz <- grep("ab", z); z[zz] # ab を名前の一部に含むオブ...
[1] "ab" "abab" "abcdab" "abdce" "cdabcd" "cdcdab"
> zz <- grep("ab|cd", z); z[zz] # ab か cd を名前の一部...
[1] "ab" "abab" "abcdab" "abdce" "cd" "cdabcd...
> zz <- grep("\\<ab", z); z[zz] # ab を名前の先頭に含む...
[1] "ab" "abab" "abcdab" "abdce"
> zz <- grep("cd\\>", z); z[zz] # cd を名前の最後に含む...
[1] "cd" "cdabcd" "cdcd"
> zz <- grep("(ab){2}", z); z[zz] # abab を名前の一部に...
[1] "abab"
> letters[grep("[a-z]", letters)]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" ...
[20] "t" "u" "v" "w" "x" "y" "z"
> txt <- c("arm","foot","lefroo", "bafoobar")
> if(any(i <- grep("foo",txt))) cat("'foo' appears at le...
'foo' appears at least once in
arm foot lefroo bafoobar
> txt[i]
[1] "foot" "bafoobar"
> i
[1] 2 4
**例2 ファイル検索 list.files()
正規表現によるファイル名のリストアップと、その内容を読み...
tab <- lapply(list.files(pattern="^data[[:digit:]]{1,}.t...
# 各データフレームは tab[[1]],tab[[2]]... で得られる
**例3 テキストの置き換え sub, gsub
# a もしくは b を二重化する。
# \1 はマッチングされたパターン [ab] (a もしくは b) を表す
# \1 は実際は \\1 とする必要があることを注意
> gsub("([ab])", "\\1\\1", "abc and ABC")
[1] "aabbc aand ABC"
# sub は最初のマッチングだけを置き換える
> sub("([ab])", "\\1\\1", "abc and ABC")
[1] "aabc and ABC"
**例4
> txt <- c("The", "licenses", "for", "most", "software",...
"designed", "to", "take", "away", "your", "fr...
"to", "share", "and", "change", "it.",
"", "By", "contrast,", "the", "GNU", "General...
"is", "intended", "to", "guarantee", "your", ...
"share", "and", "change", "free", "software", ...
> (i <- grep("[gu]", txt))
[1] 7 11 16 24 29 30 35
> (i <- grep("[gu]", txt, value=TRUE)) # g か u を含む...
[1] "designed" "your" "change" "Public" "gua...
[7] "change"
# 大文字の G を含む文字列
> txt[gsub("g","#", txt) != gsub("g","#", txt, ignore.ca...
[1] "GNU" "General"
# 返り値 -1 はマッチしなかったことを示す
# 値 4 は該当文字列の第4文字目以降にマッチしたことを示す
# 属性 ”match.length" の値 2 は二文字分マッチしたという...
> regexpr("en", txt)
[1] -1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -...
[26] -1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
attr(,"match.length")
[1] -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -...
[26] -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
> str = 'Now is the time ' # 末尾に複数の空白を含...
> sub(' +$', '', str) # 末尾の空白をあるだけ...
[1] "Now is the time"
> sub('[[:space:]]+$', '', str) # 同じことを POSIX-styl...
[1] "Now is the time"
> ls(pat="0$") # 末尾が 0 で終るオブジェク...
[1] "F10" "fitlm0" "sfun0" "x0" "y0"
> ls(pat="[0-9]$") # 末尾が数字で終るオブジェク...
[1] "DNase1" "F10" "Fn12" "cloud1...
> rm(list=ls(pat="[0-9]$")) # 末尾が数字で終るオブジェク...
> ls(pat="[0-9]$") # もう無い
character(0)
# ディレクトリ "c:/data/" (MS Windows の場合)にあるファ...
# 最初のブロック ([^.]+) はファイル名先頭 ^ にある任意の...
# 次のブロック (\\..+) はドット文字 \\. の次に任意一文字...
# 丸括弧で囲みブロック化することにより、\\1 で最初のブロ...
# つまり、\\1 でファイル名のドット文字より前の部分全部を...
filename <- sub("([^.]+)(\\..+)", "\\1", dir("c:/data/"))
**例5 COLOR(red){apropos()} オブジェクトをキーワードで...
> apropos("lm") # "lm" を名前に含むオブジェクト、apropo...
[1] ".__C__anova.glm" ".__C__anova.glm.null" ".__C...
[4] ".__C__glm.null" ".__C__lm" ".__C...
[7] "KalmanForecast" "KalmanLike" "Kalm...
[10] "KalmanSmooth" "add1.glm" "add1...
[13] "add1.mlm" "alias.lm" "anov...
以下略
aprops> apropos("\\[") # [ で始まる関数オブジェクト
[1] "[" "[.AsIs" "[.POSIXct" ...
[5] "[.data.frame" "[.difftime" "[.factor" ...
[9] "[.getAnywhere" "[.noquote" "[.terms" ...
[13] "[<-" "[<-.POSIXct" "[<-.POSIXlt" ...
[17] "[<-.factor" "[[" "[[.POSIXct" ...
[21] "[[<-" "[[<-.data.frame"
> length(apropos(".")) # すべてのオブジェクトの数
[1] 2104
> apropos("^pr") # pr で始まるオブジェクト
[1] "promptClass" "promptMethods" "pr...
[4] "prop.test" "prop.trend.test" "pr...
[7] "princomp" "promax" "pr...
以下略
> apropos("^.$") # 一文字の名前のオブジェクト
[1] "x" "!" "$" "&" "(" "*" "+" "-" "/" ":" "<" "=" ">"...
[20] "T" "[" "^" "c" "q" "t" "{" "|" "~"
> apropos("^..?$") # 高々二文字のオブジェクト
[1] "x" "as" "el" "is" "ar" "!" "!=" "$" "%%" "&" "...
[16] ".C" "/" ":" "::" "<" "<-" "<=" "=" "==" ">" "...
[31] "F" "I" "Im" "Re" "T" "[" "[[" "^" "by" "c" "...
[46] "gl" "if" "lm" "ls" "pf" "pi" "pt" "q" "qf" "qr" "...
[61] "t" "ts" "vi" "{" "|" "||" "~"
> apropos("^.{2,4}$") # 2-4文字のオブジェクト
[1] "@<-" "Math" "Ops" "as" "as<-" "el" "el<-" "i...
[11] "slot" "dist" "ppr" "nls" "acf" "ar" "ccf" "l...
[21] "!=" "$<-" "%%" "%*%" "%/%" "%in%" "%o%" "%...
[31] "::" ":::" "<-" "<<-" "<=" "==" ">=" "A...
以下略
> length(apropos("^.{8,}$")) # 8文字以上の名前のオブジェ...
[1] 1378
終了行:
COLOR(magenta){SIZE(20){R における正規表現}}
// 間瀬茂 (2004/3/17)
~
~
R の正規表現とそれを用いる関数に付いて解説(ほとんどオンラ...
~
#contents
~
*R における正規表現
R の幾つかの関数はいわゆる正規表現(GNU grep に準ずる)を受...
例えば、COLOR(red){grep},COLOR(red){regexp},COLOR(red){su...
COLOR(red){gsub},COLOR(red){strsplit}。他にも関数 COLOR(r...
COLOR(red){browseEnv}, COLOR(red){help.search}, COLOR(red...
COLOR(red){ls} はオブジェクト・ファイル名等に関し正規表現...
** COLOR(magenta){詳細}
「正規表現 (regular expression)」は文字列のある集合を表す...
R では三種類の正規表現を使える。
-COLOR(red){grep(extended = TRUE)} で使われる「拡張正規表...
-COLOR(red){grep(extended = FALSE)} で使われる「基本正規...
-COLOR(red){grep(perl = TRUE)} で使われる「パール風正規表...
関数 apropos, browseEnv, help.search, list.files, ls, str...
拡張正規表現を用いる。strsplit は 'extended = FALSE' オプ...
基本正規表現を用いる。
以下で説明されるパターンは 'cat' で表示される仕方で記述さ...
COLOR(blue){R の文字列をキーボードから入力するには、バッ...
COLOR(blue){ を二重化 } COLOR(red){\\} COLOR(blue){ する...
**COLOR(magenta){拡張正規表現 (既定動作)}
POSIX 1003.2 標準に基づく GNU 移植を用いる。既定オプショ...
-正規表現は算術表現と同様、小さな部分表現を結合して得られる
--COLOR(magenta){基本的構成要素}は単一の文字にマッチする...
全てのアルファベット文字と数値は、それ自身にマッチする正...
--COLOR(magenta){メタ文字} 特殊な意味を持つメタ文字はその...
バックスラッシュ記号をおくことで表現される。メタ文字は CO...
--COLOR(magenta){文字クラス} COLOR(red){[} と COLOR(red){...
文字のリストは
COLOR(blue){その中のいずれの文字}ともマッチする
もし最初の文字がカレットCOLOR(red){^} ならば
COLOR(blue){そのリスト中に無い任意文字列}とマッチする。
最初と最後の文字をハイフンで結ぶとCOLOR(blue){文字の範囲}...
例
[0123456789] は任意の単一の数値とマッチ
[^abc] は文字 'a', 'b', 'c' 以外の全ての文字とマッチ
-幾つかの名前付き文字クラスが予め定義されている(ロケール...
--COLOR(red){[:alnum:]} アルファベットと数値、[:alpha:] +...
--COLOR(red){[:alpha:]} 大小文字アルファベット、 [:lower:...
--COLOR(red){[:lower:]} 小文字アルファベ
--COLOR(red){[:digit:]} 数値
--COLOR(red){[:blank:]} 空白文字、スペースとタブ
--COLOR(red){[:cntrl:]} 制御文字(000-037, 177('DEL')
--COLOR(red){[:graph:]} グラフィカル文字 ([:alnum:] と [:...
--COLOR(red){[:print:]} 印字可能な文字、[:alnum:] + [:pun...
--COLOR(red){[:punct:]} パンクチュエーション文字 COLOR(re...
--COLOR(red){[:space:]} 空白文字、タブ、改行、水平タブ、...
--COLOR(red){[:xdigit:]} 16進数 COLOR(red){0 1 2 3 4 5 6 ...
-注意
--COLOR(red){[[:alnum:]]} は COLOR(red){[0-9A-Za-z]} を意...
--ほとんどのメタ文字は鍵括弧リスト内では本来の意味を失う
--COLOR(red){]} を鍵括弧リストに入れる際は必ず最初におく
--COLOR(red){^} を鍵括弧リストに入れる際は最初以外の任意...
--COLOR(red){\} および上の二つの文字だけが鈎括弧リスト内...
--ピリオッド COLOR(red){.} は任意の単一文字にマッチする
--記号 COLOR(red){\w} は COLOR(red){[[:alnum:]]} と同義だ...
--COLOR(red){\W} は COLOR(red){\w} の否定(つまり英数字以外)
--COLOR(red){^} は COLOR(blue){先頭にある空文字列} にマッ...
つまり、それ以降の表現が文字列の先頭にあることを指示する。
--COLOR(red){$} は COLOR(blue){末尾にある空文字列} にマッ...
つまり、その直前の表現が文字列の末尾にあることを指示する。
--COLOR(red){\<} は COLOR(blue){単語の先頭にある空文字列}...
--COLOR(red){\>} は COLOR(blue){単語の末尾にある空文字列}...
--COLOR(red){\b} は COLOR(blue){単語の境界にある空文字列}...
--COLOR(red){\B} は COLOR(red){単語の境界にない空文字列} ...
-繰返し指示 (正規表現の後に置き、その繰返しを表現する)
--COLOR(red){?} 直前の項目はオプションであり、零回もしく...
--COLOR(red){*} 直前の項目を零回もしくは一回以上繰り返す
--COLOR(red){+} 直前の項目を一回以上繰り返す
--'{n}' 直前の項目をちょうど n 回繰り返す
--'{n,}' 直前の項目を n 回以上繰り返す
--'{n,m}' 直前の項目を n 回以上、最大 m 回繰り返す
-注意
--繰返しはマッチング可能な最大回数行なわれる
--二つの表現は連結することができ、結果は各表現にマッチす...
--二つの表現を COLOR(red){|} で並べると、各表現の一方にマ...
例:abba|cde は abba か cde にマッチ
--繰返し指示は連結指示に優先し、連結指示は選択指示に優先...
例:(abba|cde)* と abba|cde* はことなる意味を持つ
--COLOR(red){\N} (N は単一の数字) はそれまでにマッチした ...
** COLOR(magenta){基本正規表現}
オプション COLOR(magenta){extended = FALSE} が使われた時...
~
基本正規表現ではメタ文字 COLOR(red){? + { | ( )} はその特...
COLOR(red){. \ [ ^ $ *} になる。
** COLOR(magenta){Perl 式正規表現}
オプション COLOR(magenta){perl = TRUE} は Perl 5 互換の正...
詳細は Perl 文献を参照。
*正規表現が使える関数 COLOR(red){grep}, COLOR(red){regexp...
**COLOR(magenta){用法}
-文字列ベクトル x 中から正規表現 pattern にマッチするもの...
--COLOR(red){grep(pattern, x, ignore.case = FALSE, extend...
--COLOR(red){ regexpr(pattern, text, extended = TRUE, pe...
-sub と gsub は文字列ベクトル x 中から正規表現 pattern に...
--COLOR(red){sub(pattern, replacement, x, ignore.case = F...
--COLOR(red){gsub(pattern, replacement, x, ignore.case = ...
**COLOR(magenta){引数}
-COLOR(red){pattern} 与えられた文字列ベクトルとマッチング...
-COLOR(red){x}, COLOR(red){text} マッチングの対象である文...
-COLOR(red){ignore.case} もし COLOR(blue){FALSE} ならマッ...
-COLOR(red){extended} もし COLOR(blue){TRUE} なら拡張正規...
-COLOR(red){perl} 論理値。もし可能ならパール互換の正規表...
-COLOR(red){value} もし COLOR(blue){FALSE} なら grep で決...
-COLOR(red){fixed} 論理値。もし COLOR(blue){TRUE} なら CO...
-COLOR(red){replacement} COLOR(blue){sub} と COLOR(blue)...
**COLOR(magenta){詳細}
-二つの COLOR(blue){*sub} 関数は、COLOR(blue){sub} が最初...
-COLOR(blue){regexpr} では COLOR(blue){pattern} が COLOR(...
-正規表現は COLOR(blue){extended} 引数の値に応じて、拡張...
**COLOR(magenta){返り値}
-COLOR(blue){grep} に対してパターンにマッチした COLOR(red...
-COLOR(blue){sub} と COLOR(blue){gsub} に対しては元の文字...
-COLOR(blue){regexpr} に対しては COLOR(blue){text} と同じ...
**その他の関連関数
*** COLOR(red){agrep} 近似的なマッチング
*** COLOR(red){tolower}, COLOR(red){toupper}, COLOR(red){...
*** COLOR(red){chartr} 文字列の変換
*** COLOR(red){charmatch}, COLOR(red){pmatch}, COLOR(red)...
*** COLOR(red){apropos} は regexpr を用いており、良い例を...
*** COLOR(red){ls}, COLOR(red){objects} はオブジェクトの...
*** COLOR(red){glob2rx} は Unix の ls 命令におけるような...
例 glob2rx("abc.*") -> "^abc\\."
glob2rx("a?b.*") -> "^a.b\\."
glob2rx("a?b.*", trim.tail=FALSE) -> "^a.b\\..*$"
glob2rx("*.doc") -> "^.*\\.doc$"
glob2rx("*.doc", trim.head=TRUE) -> "\\.doc$"
glob2rx("*.t*") -> "^.*\\.t"
glob2rx("*.t??") -> "^.*\\.t..$"
*幾つかの例
**例1 オブジェクトの検索 grep()
> z <- ls() # 現在のオブジェクトリスト(文字列ベクト...
> zz <- grep("ab", z); z[zz] # ab を名前の一部に含むオブ...
[1] "ab" "abab" "abcdab" "abdce" "cdabcd" "cdcdab"
> zz <- grep("ab|cd", z); z[zz] # ab か cd を名前の一部...
[1] "ab" "abab" "abcdab" "abdce" "cd" "cdabcd...
> zz <- grep("\\<ab", z); z[zz] # ab を名前の先頭に含む...
[1] "ab" "abab" "abcdab" "abdce"
> zz <- grep("cd\\>", z); z[zz] # cd を名前の最後に含む...
[1] "cd" "cdabcd" "cdcd"
> zz <- grep("(ab){2}", z); z[zz] # abab を名前の一部に...
[1] "abab"
> letters[grep("[a-z]", letters)]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" ...
[20] "t" "u" "v" "w" "x" "y" "z"
> txt <- c("arm","foot","lefroo", "bafoobar")
> if(any(i <- grep("foo",txt))) cat("'foo' appears at le...
'foo' appears at least once in
arm foot lefroo bafoobar
> txt[i]
[1] "foot" "bafoobar"
> i
[1] 2 4
**例2 ファイル検索 list.files()
正規表現によるファイル名のリストアップと、その内容を読み...
tab <- lapply(list.files(pattern="^data[[:digit:]]{1,}.t...
# 各データフレームは tab[[1]],tab[[2]]... で得られる
**例3 テキストの置き換え sub, gsub
# a もしくは b を二重化する。
# \1 はマッチングされたパターン [ab] (a もしくは b) を表す
# \1 は実際は \\1 とする必要があることを注意
> gsub("([ab])", "\\1\\1", "abc and ABC")
[1] "aabbc aand ABC"
# sub は最初のマッチングだけを置き換える
> sub("([ab])", "\\1\\1", "abc and ABC")
[1] "aabc and ABC"
**例4
> txt <- c("The", "licenses", "for", "most", "software",...
"designed", "to", "take", "away", "your", "fr...
"to", "share", "and", "change", "it.",
"", "By", "contrast,", "the", "GNU", "General...
"is", "intended", "to", "guarantee", "your", ...
"share", "and", "change", "free", "software", ...
> (i <- grep("[gu]", txt))
[1] 7 11 16 24 29 30 35
> (i <- grep("[gu]", txt, value=TRUE)) # g か u を含む...
[1] "designed" "your" "change" "Public" "gua...
[7] "change"
# 大文字の G を含む文字列
> txt[gsub("g","#", txt) != gsub("g","#", txt, ignore.ca...
[1] "GNU" "General"
# 返り値 -1 はマッチしなかったことを示す
# 値 4 は該当文字列の第4文字目以降にマッチしたことを示す
# 属性 ”match.length" の値 2 は二文字分マッチしたという...
> regexpr("en", txt)
[1] -1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -...
[26] -1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
attr(,"match.length")
[1] -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -...
[26] -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
> str = 'Now is the time ' # 末尾に複数の空白を含...
> sub(' +$', '', str) # 末尾の空白をあるだけ...
[1] "Now is the time"
> sub('[[:space:]]+$', '', str) # 同じことを POSIX-styl...
[1] "Now is the time"
> ls(pat="0$") # 末尾が 0 で終るオブジェク...
[1] "F10" "fitlm0" "sfun0" "x0" "y0"
> ls(pat="[0-9]$") # 末尾が数字で終るオブジェク...
[1] "DNase1" "F10" "Fn12" "cloud1...
> rm(list=ls(pat="[0-9]$")) # 末尾が数字で終るオブジェク...
> ls(pat="[0-9]$") # もう無い
character(0)
# ディレクトリ "c:/data/" (MS Windows の場合)にあるファ...
# 最初のブロック ([^.]+) はファイル名先頭 ^ にある任意の...
# 次のブロック (\\..+) はドット文字 \\. の次に任意一文字...
# 丸括弧で囲みブロック化することにより、\\1 で最初のブロ...
# つまり、\\1 でファイル名のドット文字より前の部分全部を...
filename <- sub("([^.]+)(\\..+)", "\\1", dir("c:/data/"))
**例5 COLOR(red){apropos()} オブジェクトをキーワードで...
> apropos("lm") # "lm" を名前に含むオブジェクト、apropo...
[1] ".__C__anova.glm" ".__C__anova.glm.null" ".__C...
[4] ".__C__glm.null" ".__C__lm" ".__C...
[7] "KalmanForecast" "KalmanLike" "Kalm...
[10] "KalmanSmooth" "add1.glm" "add1...
[13] "add1.mlm" "alias.lm" "anov...
以下略
aprops> apropos("\\[") # [ で始まる関数オブジェクト
[1] "[" "[.AsIs" "[.POSIXct" ...
[5] "[.data.frame" "[.difftime" "[.factor" ...
[9] "[.getAnywhere" "[.noquote" "[.terms" ...
[13] "[<-" "[<-.POSIXct" "[<-.POSIXlt" ...
[17] "[<-.factor" "[[" "[[.POSIXct" ...
[21] "[[<-" "[[<-.data.frame"
> length(apropos(".")) # すべてのオブジェクトの数
[1] 2104
> apropos("^pr") # pr で始まるオブジェクト
[1] "promptClass" "promptMethods" "pr...
[4] "prop.test" "prop.trend.test" "pr...
[7] "princomp" "promax" "pr...
以下略
> apropos("^.$") # 一文字の名前のオブジェクト
[1] "x" "!" "$" "&" "(" "*" "+" "-" "/" ":" "<" "=" ">"...
[20] "T" "[" "^" "c" "q" "t" "{" "|" "~"
> apropos("^..?$") # 高々二文字のオブジェクト
[1] "x" "as" "el" "is" "ar" "!" "!=" "$" "%%" "&" "...
[16] ".C" "/" ":" "::" "<" "<-" "<=" "=" "==" ">" "...
[31] "F" "I" "Im" "Re" "T" "[" "[[" "^" "by" "c" "...
[46] "gl" "if" "lm" "ls" "pf" "pi" "pt" "q" "qf" "qr" "...
[61] "t" "ts" "vi" "{" "|" "||" "~"
> apropos("^.{2,4}$") # 2-4文字のオブジェクト
[1] "@<-" "Math" "Ops" "as" "as<-" "el" "el<-" "i...
[11] "slot" "dist" "ppr" "nls" "acf" "ar" "ccf" "l...
[21] "!=" "$<-" "%%" "%*%" "%/%" "%in%" "%o%" "%...
[31] "::" ":::" "<-" "<<-" "<=" "==" ">=" "A...
以下略
> length(apropos("^.{8,}$")) # 8文字以上の名前のオブジェ...
[1] 1378
ページ名: