Найти определенное слово в треугольных скобках с помощью регулярных выражений
Есть текст:
text = 'qqqqqqqqqqqqqq >hello world< qqqqqqqqqqqqqq >houses and apartments< qqqqqqqqqq >hello kitty< qqqqqqqqqqqq'
Из которого мне нужно узнать где конкретно в тексте (получить индекс) выражения в треугольных скобках. Сложность заключается в том что мне нужно определенное выражения в треугольных скобках, с определенными словами, а именно: houses and apartments. При этом порядок эти слов может меняться местами: apartments and houses.
Что бы получить текст в треугольных скобках я делал так:
match = re.search(r"\>([a-z ]+)\<", text)
или так:
match = re.search(r'>(.*?)<', text)
И в первом и во втором случае я находил 'hello world'. Вот в чем вопрос, как мне найти текст в треугольных скобках с определенными словами (houses, and, apartments)?
Ответы (2 шт):
Автор решения: Алексей Р
→ Ссылка
Используйте, например, метод re.finditer()
import re
text = 'qqqqqqqqqqqqqq >hello world< qqqqqqqqqqqqqq >houses and apartments< qqqqqqqqqq >hello kitty< qqqqqqq>apartments houses and <qqqqq'
for m in re.finditer(r'(?<=>)[^<>]*(?:houses|and|apartments)[^<>]*(?=<)', text):
print(f'`{m[0]}` начинается с {m.span()[0]} символа')
`houses and apartments` начинается с 45 символа
`apartments houses and ` начинается с 101 символа
Автор решения: Глеб
→ Ссылка
А можно и без регулярок.
text = 'qqqqqqqqqqqqqq >hello world< qqqqqqqqqqqqqq >houses and apartments< qqqqqqqqqq >hello kitty< qqqqqqqqqqqq'
result = []
lst_first = [i for i, j in enumerate(text) if j == '>']
for i in lst_first:
for j in range(i, len(text)):
if text[j] == '<':
result.append(text[i+1:j])
break
print(result)
#['hello world', 'houses and apartments', 'hello kitty']