1

次の URL パスがあります。

さまざまなセグメントをキャプチャしたいと考えています。を含むすべての作業.mp4はかなり簡単ですが、その後、次のサブセグメントでは注意が必要です。

media_u11bgy04l_b282848_qdGltZT0xMzgwMjA0ODMzJnNlc3Npb249MjE2ODcxNzI3NTc=.abst/Seg1-Frag74

これをキャプチャしたいので、3 つの一致があります。

  1. media_u11bgy04l_b282848_qdGltZT0xMzgwMjA0ODMzJnNlc3Npb249MjE2ODcxNzI3NTc=
  2. .abst
  3. /Seg1-Frag74

アイデアは、#2 は異なる形式にすることができ (これはライブ ストリーミング用なので、 と が.f4mあります.m3u8)、#1 は基本的にスキップする必要があるものです。#3 はオプション (常に存在するとは限りません) であるため、#2 の後に何もない場合でも一致する必要があります。

私は次のことを試しました:(.*?)(\.abst|\.f4m|\.m3u8)?(.*)

しかし、結果は次のとおりです(私はpythonを使用しているため、None.

  1. '' (空文字列)
  2. なし
  3. media_u11bgy04l_b282848_qdGltZT0xMzgwMjA0ODMzJnNlc3Npb249MjE2ODcxNzI3NTc=.abst/Seg1-Frag74

次のように変更すると、次のよう(.*)(\.abst|\.f4m|\.m3u8)?(.*)になります。

  1. media_u11bgy04l_b282848_qdGltZT0xMzgwMjA0ODMzJnNlc3Npb249MjE2ODcxNzI3NTc=.abst/Seg1-Frag74
  2. なし
  3. '' (空文字列)

2 番目の部分は省略可能です。これは、不正な形式のリクエストや何かを見逃した場合 (事前に指定されたプレイリスト タイプなどではない場合) に、予期しない入力をキャプチャする (そして調査できるようにエラーをスローする) ためです。

私は正規表現以外のソリューションを使用することにオープンです。これにアプローチする方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

おそらく次のようなことを試すことができます...

r'(.*?)(\.[^/]+)(.*)'

[^/]+さまざまな拡張機能も取得できます。あなたが言及したものだけを取得したい場合は、(\.abst|\.f4m|\.m3u8)代わりに使用(\.[^/]+)してください(を戻さないでください?


?正規表現の が正しい一致を妨げていました:

(.*?)(\.abst|\.f4m|\.m3u8)?(.*)

ここでは、文字列の先頭で、(.*?)一致なしを試み(\.abst|\.f4m|\.m3u8)?、同じポイント、つまり文字列の先頭で一致 (null) を取得することに成功します。

(.*)(\.abst|\.f4m|\.m3u8)?(.*)

ここで(.*)は貪欲で、文字列の最後に行き着き、(\.abst|\.f4m|\.m3u8)?再度一致を試みると、そこで一致 (null) が得られます。

于 2013-09-27T10:05:24.627 に答える
1

2 番目のグループをオプションにしないでください。グループ 1 と 3 をキャプチャする必要はありません。

.*?(\.abst|\.f4m|\.m3u8).*?
于 2013-09-27T10:04:42.530 に答える