24

次の例を考えてみましょう。

> testLines <- c("I don't want to match this","This is what I want to match")
> grepl('is',testLines)
> [1] TRUE TRUE

しかし、私が欲しいのは、それが単一の単語として独立している場合にのみ「is」と一致することです。Perlのドキュメントを少し読んだところ、これを行う方法は\ bを使用することであるように見えました。これは、パターンの前後にあるものを識別するために使用できるアンカーです。つまり、\ bword\bは「word」と一致しますが「sword」とは一致しません。 '。そこで、「TRUE」に設定されたPerl構文を使用して、次の例を試しました。

> grepl('\bis\b',testLines,perl=TRUE)
> [1] FALSE FALSE

私が探している出力はですFALSE TRUE

4

3 に答える 3

30

「\<」は単語の先頭の別のエスケープシーケンスであり、「\>」は末尾です。R文字列では、円記号を2倍にする必要があるため、次のようになります。

> grepl("\\<is\\>", c("this", "who is it?", "is it?", "it is!", "iso"))
[1] FALSE  TRUE  TRUE  TRUE FALSE

これは「is!」と一致することに注意してください。しかし、「iso」ではありません。

于 2011-06-29T23:24:56.560 に答える
20

エスケープを正規表現に渡すには、ダブルエスケープが必要です。

> grepl("\\bis\\b",testLines)
[1] FALSE  TRUE
于 2011-06-29T23:17:17.007 に答える
6

非常に単純化して、先頭のスペースに一致します。

testLines <- c("I don't want to match this","This is what I want to match")
grepl(' is',testLines)
[1] FALSE  TRUE

正規表現にはこれ以上のものがありますが、基本的にパターンはより具体的である必要があります。より一般的なケースで必要になるのは、大きなトピックです。正規表現を参照してください

この例で機能するその他の可能性:

grepl(' is ',testLines)
[1] FALSE  TRUE
grepl('\\sis',testLines)
[1] FALSE  TRUE
grepl('\\sis\\s',testLines)
[1] FALSE  TRUE
于 2011-06-29T23:06:29.577 に答える