3

pat1ORpat2を見つけたいvec

vec <- c("(and) i.e.", "(and) ie", "(and)ie", "and i.e.", "and ie", "and) i.e.")

pat1 <- "\\(and) i\\.e\\."
pat2 <- "\\(and) ie"

を使用して2つのパターンを結合しようとします(pat1|pat2)

# combine the two patterns 
pat1or2 <- paste0("(", pat1, "|", pat2, ")")
# [1] "(\\(and) i\\.e\\.|\\(and) ie)"

grep(pat1, vec, value=TRUE)
# [1] "(and) i.e."

grep(pat2, vec, value=TRUE)
# [1] "(and) ie"

grep(pat1or2, vec, value=TRUE)
# character(0)

明らかに、何かが欠けていて、それを見つけることができません。
(perlをいじって修正してみましたが、それだけではありませんでした)

2 つのパターンを組み合わせる際の誤りを指摘していただけますか?

4

2 に答える 2

5

すべての括弧をバックスラッシュするのを忘れました。あなたの2つのパターンは次のとおりです。

pat1 <- "\\(and\\) i\\.e\\."
pat2 <- "\\(and\\) ie"

その後、の有無にかかわらず、すべてがうまくいくはずperl = TRUEです。perl = TRUE古い(間違った)パターンで使用しているエラーを見つけることができたのは次のとおりです。

grep(pat1, vec, value=TRUE, perl = TRUE)
# Error in grep(pat1, vec, value = TRUE, perl = TRUE) : 
#   invalid regular expression '\(and) i\.e\.'

かっこのバランスが取れていないことを明確にします。

于 2013-07-07T23:00:28.583 に答える