0

私はいくつかの異なる構文で遊んでいますが、何も機能していないようです。「TypeError:'str'オブジェクトはアイテムの割り当てをサポートしていません」という構文エラーが発生しました。

for url in urls:
  for i in range(len(urls)):    
    filename[i] = [re.search(r'/([.]+)(.pdf)') for url[i] in urls]

私も試しました:

for url in urls:
    filename[i] = [re.search(r'/([.]+)(.pdf)') for url[i] in urls for i in range(len(urls))]

そして、他のいくつかの順列。リスト内包表記がこれを行うための最良の方法だと思っていましたが、そうするために使用する必要のある構文がわかりません。何か助けてください?

4

2 に答える 2

2

あなたはリスト内包表記で正しい方向に進んでいましたが、それを実際よりも複雑にしていました:

[re.search(r'/([.]+)(.pdf)', url) for url in urls]

これは一致のリストになることに注意してください。たとえば、一致しないURLを無視して、検出したグループが必要な場合は、次のように実行できます。

[match.groups() for match in (re.search(r'/([.]+)(.pdf)', url) for url in urls) if match]

これは、ネストされたジェネレータ式を使用して、一致が行われたかどうかをチェックし、一致した場合はそこからグループを抽出します。

>>> urls = ["http://wwww.example.com/test.html", "http://www.example.com/test.pdf"]
>>> [match.groups() for match in (re.search(r'/([^/]+)(.pdf)', url) for url in urls) if match]
[('test', '.pdf')]

ここでは、私の例で機能するように正規表現を少し編集しました。これは例のためだけに行われます。

もちろん、を取得するだけでなく、ここで一致オブジェクトmatch.groups()を使用して好きなことを行うことができます。

于 2012-05-05T20:40:05.673 に答える
0

リスト内包表記を使用して、URLのリストを作成しました。URLの正規表現の結果は、パターンと一致する場合にのみ新しいリストに挿入されます。

file_regex = re.compile(r'/([a-zA-Z0-9]+)(.pdf)')

filenames = [file_regex.search(url) for url in urls if file_regex.match(url)]

print filenames
于 2012-05-05T20:43:54.657 に答える