1

Pythonregexpを使用してHTML属性の値をキャプチャできるようにしたい。現在使用しています

re.compile( r'=(["\'].*?["\'])', re.IGNORECASE | re.DOTALL )

私の問題は、属性が一重引用符で始まっているか二重引用符で始まっているかにかかわらず、正規表現に「記憶」させたいということです。

次の属性を持つ現在のアプローチでバグを見つけました

href="javascript:foo('bar')"

私の正規表現がキャッチ

"javascript:foo('
4

2 に答える 2

3

最初の見積もりを取得してから、後方参照を使用できます。

r'=((["\']).*?\2)'

ただし、正規表現はHTMLを解析するための適切なアプローチではありません。代わりに、DOMパーサーの使用を検討する必要があります。

于 2012-11-01T09:25:27.947 に答える
1

理論的には、次の方が効率的です。

regex = r'"[^"]*"|\'[^']*\''

参考までに、ジェフリー・フリードルのhtmlタグの表現(フクロウの本から)は次のとおりです。

<              # Opening "<"
  (            #    Any amount of . . . 
     "[^"]*"   #      double-quoted string,
     |         #      or . . . 
     '[^']*'   #      single-quoted string,
     |         #      or . . . 
     [^'">]    #      "other stuff"
  )*           #
>              # Closing ">"
于 2012-11-01T09:59:55.900 に答える