2011-05-17 54 views
-6

的HTML是这个规则不匹配的html:为什么使用python

<div style="background-color:#A7A7A7;text-align:center;"> 
<span style="color:#FFFFFF;">{{rk_user.name}}のステータス</span> 
</div> 

我经常是:

a = r''' 
<div style="background-color:#([a-z0-9]+);text-align:center;"> 
\s*<span style="color:#(.+?);">(.+)</span> 
</div> 
''' 

但这经常不匹配的HTML,

等什么是错的 ?

感谢

+12

什么问题是,你使用正则表达式来解析HTML。 – BoltClock 2011-05-17 04:01:19

+0

不符合html – zjm1126 2011-05-17 04:02:17

+1

'#([a-z0-9] +)'不匹配大写字符是我的猜测。 – 2011-05-17 04:02:42

回答

1

您应该使正则表达式不区分大小写,因为颜色是#A7A7A7,并且您匹配#a7a7a7。

,您可以尝试在许多网站为:http://regexpal.com/

0

最起码,你在颜色区分大小写的问题。另外,你可能想冥想BoltClock的评论。

0

像@BoltClock提到,不建议使用正则表达式这样。如果不是现在,有时候你会后悔的。有很多角落案例会使正则表达式变得复杂,并且有时也毫无用处。

无论如何,匆匆一瞥,背景颜色您已使用[a-z0-9]只能匹配小写字母。但样品有大写字母。您也可能想要大写[a-zA-Z0-9]对于其他颜色,为什么不使用相同的颜色?为什么一个(.+?)

0

除了许多其他人的意见,你可能想使用re.UNICODE标志,因为它看起来像你有一些日本字符在那里。

2
+0

我想指出BeautifulSoup基本上是一堆正则表达式。这个答案仍然正确,但它增加了一个有趣的观点。 – Henry 2011-05-17 05:22:29

+0

这是一个极端简化。许多语言的许多解析器都可以使用正则表达式,但这与包含大量正则表达式的解析器非常不同。不可能严格使用正则表达式来实现HTML(或XML)解析器,因为HTML和XML是上下文无关的,而不是常规的语言。你有没有看到[这个问题](http://stackoverflow.com/questions/2400623/if-youre-not-supposed-to-use-regular-expressions-to-parse-html-then-how-are-htm) ? – 2011-05-17 13:16:14

+1

够公平的,“基本上一堆”是戏剧性的。 BeautifulSoup当然还有很多其他功能,并且您对本页面问题的回答深入地展示了它们自己的正则表达式如何不适合。 – Henry 2011-05-17 14:25:38