Python正規表現のサーバー制約を満たす二重引用符で囲まれたすべての部分文字列を検索します

ウィルソン

次の2つの制約を満たす、二重引用符で囲まれたすべての部分文字列を見つけたいと思います。

  1. 最短ストリングで始まる「HTTP」
  2. 「.bmp」または「.jpg」で終わります

私のコードは以下の通りです:

import re
pat = '"(http.+?\.(jpg|bmp))"'  # I don't how to modify this pattern
reg = re.compile(pat)
aa = '"http:afd/aa.bmp" :tt: "kkkk"  ++, "http--test--http:kk/bb.jpg"'
print reg.findall(aa)

私の期待する出力は

['http:afd/aa.bmp', 'http:kk/bb.jpg']

しかし、実行結果は

[('http:afd/aa.bmp', 'bmp'), ('http--test--http:kk/bb.jpg', 'jpg')]

私はすでにいくつかの種類のパターンを試しましたが、それでも私が望むものを得ることができません。

期待する結果を得るには、コードをどのように変更する必要がありますか?ありがとう!

WiktorStribiżew

[^"]*最初の後に否定文字クラスを使用して、"二重引用符で囲まれた部分文字列内にとどまります(注-これは、文字列にエスケープシーケンスがなく、最後http到達した場合にのみ機能し、最後に追加して、末尾に到達します"

import re
pat = r'"[^"]*(http.*?\.(?:jpg|bmp))[^"]*"'
reg = re.compile(pat)
aa = '"http:afd/aa.bmp" :tt: "kkkk"  ++, "http--test--http:kk/bb.jpg"'
print reg.findall(aa)
# => ['http:afd/aa.bmp', 'http:kk/bb.jpg']

オンラインPythonデモを参照してください

パターンの詳細

  • " -文字通りの二重引用符
  • [^"]*- 0+二重引用符以外の文字できるだけ多くいるので、*ある貪欲数量詞
  • (http.*?\.(?:jpg|bmp))-以下にre.findall一致するグループ1(で抽出):
    • http -リテラル部分文字列 http
    • .*?-任意の0+文字、できるだけ少ない(よう*?である怠惰な数量詞)
    • \. -リテラルドット
    • (?:jpg|bmp)-re.findallいずれかjpgまたはbmp部分文字列に一致する非キャプチャグループ(一致するテキストを出力できないようにするため
  • [^"]* -可能な限り多く、二重引用符以外の0文字以上
  • " -文字通りの二重引用符

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ