2017-06-14 3 views
0

'r'接頭辞が生の文字列を示すことがわかります。なぜなら、次の例では特殊な正規表現文字通り取られるべきではない文字列に?トークン化されたテキストと接頭辞 'r'のfindallメソッドの使用

検索されている 'string'はnltk Textオブジェクトですが、これと関連があると思いますか?しかし、私はそれがfindallの使用にどのような影響を与えるか理解していません。この特定のケースで

moby.findall(r"<a> (<.*>) <man>") 

答えて

3

この文字列が誤って解釈される可能性のある配列を含有していないとして、rは、違いはありません。しかし、\n\tのようなシーケンスの誤った解釈を避けるために、正規表現を書くときはrを使うのが良い習慣です。 rで、2文字(バックスラッシュとそれに続く文字)として文字通り処理されます。 rがなければ、改行とタブにそれぞれ評価されます。

+0

これはregexps(*、+、?など)の中で特別な意味を持つ文字とは関係がありません。これらはバックスラッシュを使って正規表現でエスケープする必要があります。文字通り扱うには '\ *' 'r'は効果がありません。 –

1

r文字列の前には、sigilと呼ばれます。

たとえば、 '\ n'は改行文字として扱われますが、r '\ n'は\としてその後に続く文字\として扱われます。

しかし、あなたの正規表現のために:

moby.findall(r"<a> (<.*>) <man>") 

それは違いはありませんが、常にバックスラッシュをエスケープ避けるために、生の文字列として正規表現を扱うことをお勧めします。

関連する問題