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