2

もともと私はURLパターンを使用していました:

url(r'^poi/folder/(?P<doc_type>\w+)/$', ...)

doc_typedjango からプルされる文字列であるパラメーターをキャプチャするためにmodels.CharField、しかし、django を使用するようにモデルを変更するとmodels.SlugField、パターンは文字列と一致しなくなり (SlugField は Unicode 文字列を返します)、パターンを次のように変更する必要がありました。

url(r'^poi/folder/(?P<doc_type>[-\w]+)/$', ...

私の質問は、括弧と「-」を追加すると、パターンがユニコード文字列と一致するのはなぜですか?

4

1 に答える 1

5

特にDjangoについてはわかりませんが、間違っていると思います。括弧は、正規表現の文字クラスセレクターを示します。

\wしたがって、との違いは次の[-\w]とおりです。

  • \w小文字と大文字、数字と_(アンダースコア記号)のみに一致し、(ダッシュ記号)には一致しません-
  • 文字クラスは[-\W]、すべての一致に(ダッシュ記号)\wを加えたものに一致します。-

したがって、最初の正規表現が他のフィールドで機能しなかったが、2 番目の正規表現が機能した理由は、2 番目のフィールドにダッシュがあった可能性が高いです。フィールドに Unicode 文字が含まれていたという事実ではありません。

于 2013-03-04T21:38:28.827 に答える