1

我希望能够使用 python 正则表达式捕获 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'"[^"]*"|\'[^']*\''

作为参考,这里是 Jeffrey Friedl 的html 标签表达式(来自 owl book):

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