Могу ли я сделать регулярное выражение 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.

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

2 ответа

Решение
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)

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>]
Другие вопросы по тегам