Как я могу получить все термины, начиная с «#»?
Вопрос
У меня есть такая строка: "sometext #Syrup #nshit #thebluntislit"
И я хочу получить список всех терминов, начиная с '#'
Я использовал следующий код:
import re
line = "blahblahblah #Syrup #nshit #thebluntislit"
ht = re.search(r'#\w*', line)
ht = ht.group(0)
print ht
И я получаю следующее:
#Syrup
Мне было интересно, есть ли способ, которым я мог бы вместо этого получить список подобного:
[#Syrup,#nshit,#thebluntislit]
Для всех терминов, начиная с «#» вместо первого термина.
Решение
Похоже re.findall()
Буду делать то, что вы хотите.
matches = re.findall(r'#\w*', line)
Другие советы
Регулярное выражение не нужно с хорошими языками программирования, такими как Python:
hashed = [ word for word in line.split() if word.startswith("#") ]
Вы можете использовать
compiled = re.compile(r'#\w*')
compiled.findall(line)
Выход:
['#Syrup', '#nshit', '#thebluntislit']
Но есть проблема. Если вы ищете строку как 'blahblahblah #Syrup #nshit #thebluntislit beg#end'
, выход будет ['#Syrup', '#nshit', '#thebluntislit', '#end']
.
Эта проблема может быть решена с помощью положительного LookBehind:
compiled = re.compile(r'(?<=\s)#\w*')
(это невозможно использовать \b
(граница слов) здесь с #
не среди
\w
символы [0-9a-zA-Z_]
который может представлять собой слово, какое границу обыскивается).