2014-10-22 2 views
0

Так что мне нужно, чтобы захватить номера после линий, глядя, как этотМогу ли я найти регулярное выражение findall?

<div class="gridbarvalue color_blue">79</div> 

и

<div class="gridbarvalue color_red">79</div> 

Есть ли способ, что я могу сделать findAll('div', text=re.recompile('<>)) где бы найти метки с gridbarvalue color_<red or blue>?

Я использую beautifulsoup.

Также жаль, если я не стану сомневаться в моем вопросе, я довольно неопытен в этом.

+0

Вы хотите получить номер '79'? –

+0

Да, вроде бы несколько строк, как я сказал, и я хочу захватить числа. – user3716335

+1

[Посмотрите эту часть документации] (http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll%28name,%20attrs,%20recursive, % 20text,% 20limit,% 20 ** kwargs% 29) – nhahtdh

ответ

0
import re 
elems = soup.findAll(attrs={'class' : re.compile("color_(blue|red)")}) 
for each e in elems: 
    m = re.search(">(\d+)<", str(e)) 
    print "The number is %s" % m.group(1) 
+0

Я думаю, вы должны использовать 'e.strip()' вместо использования регулярного выражения для извлечения. – nhahtdh

1

class является ключевым словом Python, поэтому BeautifulSoup ожидает вас поставить подчеркивание после этого при использовании его в качестве параметра ключевого слова

>>> soup.find_all('div', class_=re.compile(r'color_(?:red|blue)')) 
[<div class="gridbarvalue color_blue">79</div>, <div class="gridbarvalue color_red">79</div>] 

Чтобы также соответствовать тексту, используйте

>>> soup.find_all('div', class_=re.compile(r'color_(?:red|blue)'), text='79') 
[<div class="gridbarvalue color_blue">79</div>, <div class="gridbarvalue color_red">79</div>] 
+0

@Unihedron thanks –

Смежные вопросы