2016-03-28 10 views
-1

なぜ構文がうまくいかなかったのか分かりません。なぜ「10年」という文字列と「10年(342)」という文字列「(342)」を見つけることができますか? (-1を返すと、それが見つからないことを意味します)何が欠けていますか?前もって感謝します。R:regexprが失敗しましたか?

pos = regexpr('10-year(342)', '<td class="sente">10-year(342)<td class="sente">')

enter image description here

+2

括弧は、正規表現では特殊文字です。文字通りの括弧を探したい場合は、それらをエスケープする必要があります(例えば、'10 -year \\(342 \\) ')。しかし実際のソリューションはおそらくhtmlの正規表現を使用しないで、実際のhtml/xmlパーサを使用することです。 – joran

+0

ありがとうございました。「特別な意味を持つメタキャラクタは、バックスラッシュを前に付けて引用することができます。」stat.ethz.ch/R-manual/R-devel/library/base/html/regex.htmlから読みましたが、ダブルバックスラッシュを言っていない... –

+0

はい、それは少し混乱することができます。 "\"はそれ自体が特殊文字としてリストされていることに注意してください。再帰によって、実際には2つの "\\"が必要なバックスラッシュを得ることができます。 – joran

答えて

1

あなたの表現で丸括弧を解釈されます。

regexpr('10-year\\(342\\)', '<td class="sente">10-year(342)<td class="sente">') 
+0

ありがとうございました。「特別な意味を持つメタキャラクタは、https://stat.ethz.ch/R-manual/R-devel/library/base/html/regexの前にバックスラッシュを付けて引用することができます。 htmlは、二重のバックスラッシュを言っていない... –

関連する問題