2015-10-13 258 views
-6

我有以下字符串,我想在这种情况下,应当认可正则表达式字符串在python

而且有时输入,可就是这样,提取现场

<td class="label" width="150"">State</td><td width="" class="field">Approved&nbsp;</td> 

的价值

<td class="label" width="150"">Type</td><td width="" class="field">Technical&nbsp;Document&nbsp;</td> 

这在技术SHD结果文档

有时也可以是

<td class="label" width="150"">Title</td><td width="" class="field">Reversal Plate</td> 

在这种情况下,它会反向板

我们怎么能写这样的字符串正则表达式。

+3

你看起来像你正试图用正则表达式解析HTML。你想要更好的选择吗? –

回答

1

不要使用正则表达式,你应该使用一些HTML/XML解析器,例如BeautifulSoup

from bs4 import BeautifulSoup 
soup = BeautifulSoup(s,'html.parser') #`s` being your string. 
for td in soup.findAll('td',class_="field"): 
    print(td.get_text()) 

以上将为您的例子得到正确的结果。

演示 -

>>> s = """<td class="label" width="150"">State</td><td width="" class="field">Approved&nbsp;</td>""" 
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(s,'html.parser') 
>>> for td in soup.findAll('td',class_="field"): 
...  print(td.get_text()) 
... 
Approved  
>>> s = """<td class="label" width="150"">Type</td><td width="" class="field">Technical&nbsp;Document&nbsp;</td>""" 
>>> soup = BeautifulSoup(s,'html.parser') 
>>> for td in soup.findAll('td',class_="field"): 
...  print(td.get_text()) 
... 
Technical Document  
+0

我想尝试一下可用的选项,是否有可能使用正则表达式? –

+0

@RidhiJain你可以看看另一个答案,但请注意它只能在非常特定的情况下工作。所以如果你100%肯定你给出的三个例子是你想找到的唯一案例,那么你可以使用它。它会停止工作,如果在标签中有''''和'>'之间有一个小的窗口,但是大多数正则表达式解决方案你会得到这样的结果 –

+0

如何安装美丽的汤.... IM新到Python ,如何检查运行 –

0

正如@Anand小号库马尔提到你不必使用regex,使用Beautifulsoup更快。不过,既然你问了regex解决方案,可以使用下面的代码:

import re 
s = '<td class="label" width="150"">State</td><td width="" class="field">Approved&nbsp;</td>' 
m = re.compile('"field">(.*)<') 
print (m.search(s).group(1)) 

输出:

Approved&nbsp; 

regex解决方案将匹配任何里面的class="field">....</td>