キャプチャする正規表現を作成することは可能ですか?すべての出現の文字は一連の文字で区切られますか?言い換えれば、標準の.split()
メソッドと同等のものを探しています。文字列で区切られたすべてのテキストをキャプチャするための正規表現
Tornado WebアプリケーションのURLルートを指定する際に正規表現が使用されるため、split()
は使用できません。たとえば:トルネード、Djangoのか、ルートパターンを実装し、他のWebフレームワークの上に構築されたWebアプリケーションのURLルートを指定する際
handlers = [
(r'/posts/([0-9a-zA-Z_\-]+)', PostsHandler),
]
このような正規表現は便利です。特に、未知の長さのURLパスを引数のリストに解析する。
は、これまでのところ私は、次の正規表現を思い付くために管理している:
/^\/posts(?:\/([a-zA-Z0-9_\-]+))+/
残念ながら、式は/posts/show/some-slug/15
と一致する一方で、それが唯一の代わり['show', 'some-slug', '15']
の、最後のマッチング・グループ(15
)を返します。
私は達成されたいです:
/posts/edit/15/
=>['edit', '15']
/posts/edit/15
=>['edit', '15']
/posts/2010/15/11
=>['2010', '15', '11']
分割を使用できない理由はありますか?あなたの望む結果が組み込み関数が返すものとまったく同じなら、なぜ組み込み関数を使用しないのですか? –
「一連の文字で囲まれた」ことを説明する必要があります。 2番目の例では、 '15'は囲まれていません。あなたの3番目の例では、 '11'は囲まれていません。また、 ".split()メソッドと同等"と言っていますが、あなたの正規表現ではそれに一致する '[a-zA-Z0-9 _ \ - ] +'にテキストが制限されています。 –
あなたのregex(sed/perl/awkスタイルで書かれています)は、文字列が '/ posts'で始まらなければならないことを指定していますが、あなたの例はどれも'/posts'で始まっていません。 3番目の例には、入力ミス(achives)があります。実際に実行したコードからではなく、(dim)メモリからすべての質問を入力しているようです。削除してもう一度やり直してください。あなたが 'Python'タグについて真剣であれば、Pythonコードとその出力を表示してください。 –