0

私は本当に正規表現の初心者です。私は自分でこれをやろうとしましたが、マニュアルからどのようにアプローチするかを理解できませんでした。特定のコンテンツのすべての img タグを見つけようとしています。以下に記述しましたが、None が返されます

            content = i.content[0].value
            prog = re.compile(r'^<img')
            result = prog.match(content)
            print result

助言がありますか?

4

2 に答える 2

1

多目的ソリューション:

image_re = re.compile(r"""
    (?P<img_tag><img)\s+    #tag starts
    [^>]*?                  #other attributes
    src=                    #start of src attribute
    (?P<quote>["''])?       #optional open quote
    (?P<image>[^"'>]+)      #image file name
    (?(quote)(?P=quote))    #close quote
    [^>]*?                  #other attributes
    >                       #end of tag
    """, re.IGNORECASE|re.VERBOSE) #re.VERBOSE allows to define regex in readable format with comments

image_tags = []
for match in image_re.finditer(content):
    image_tags.append(match.group("img_tag"))

#print found image_tags
for image_tag in image_tags:
    print image_tag

正規表現の定義でわかるように、含まれています

(?P<group_name>regex)

見つかったグループに、番号ではなく でアクセスできますgroup_name。読みやすさのためです。したがって、タグのすべてのsrc属性を表示したい場合は、次のように記述します。img

for match in image_re.finditer(content):
    image_tags.append(match.group("image"))

この image_tags リストの後、イメージ タグの src が含まれます。

また、html を解析する必要がある場合、まさにその目的のために設計されたインストゥルメントがあります。たとえば、 xpath式を使用するのはlxmlです。

于 2012-06-30T10:53:45.663 に答える
0

Pythonはわかりませんが、通常のPerl互換の正規表現を使用していると仮定しています...

「<img[^>]+>」を検索することをお勧めします。これは、「<img」の後に「>」以外のものが続き、その後に「>」が続きます。一致するたびに、完全な画像タグが付けられます。

于 2012-06-30T10:45:24.517 に答える