2013-07-31 147 views
-8
<dt class="col2"> 
<p>Rs. 2691.00 </p> 
</dt> 

从上面的html代码,我需要使用正则表达式提取价格。我用beautifulSoup进行解析。html标签提取价格

任何人都可以为上述提出正则表达式吗?

+1

那么使用'beautifulSoup'有什么问题? –

+1

只是为了让事情变得更加美好和闪亮干净 - 您是否试图从* HTML *中提取价格,或者,您是否试图从'Rs中提取价格。 2691.00'字符串,你从某个HTML解析器获得了文本数据?因为,你可能应该知道:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

回答

2

如果你想获得“2691.00”,然后使用:

(?<=Rs\.)\s*(\d+\.\d{2}) 

大多数正则表达式引擎不能做*在回顾后,所以使它足够的动态,如果有更多的没有失败我把它留在主要组中的空间超过1个。您可以使用主要匹配并修剪掉多余的空间或使用捕获组1. 1

(?<=)是一种积极的后视。这告诉正则表达式引擎,在主要匹配组之前,必须匹配那里面的任何东西,但不要将它包含在匹配中。

Rs\.符合“Rs”。在正则表达式a。角色匹配任何东西,所以你必须转义它才能让它只匹配一段时间。

\s可以匹配空格。

*匹配0和无穷大。

\d匹配数字。

+匹配1和无穷大。与*类似,但必须找到至少1个才能成功匹配。

{2}意味着它必须找到2之前的任何东西。所以\d{2}\d\d相同。

而且我在围绕价格匹配创建组时使用括号。这使您可以从整个比赛中提取该组。如果要提取只是“美元”量或只是改变与这可以进一步用于:

((\d+)\.(\d{2})) 

然后...我可能有这样的顺序错了...捕获组1将包含2691.00,捕获组2将包含2691,并且捕获组3将包含00