Как я могу получить все термины, начинающиеся с «#»? - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть такая строка: "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]

для всех терминов, начинающихся с '#', а не только для первого.

Ответы [ 3 ]

21 голосов
/ 02 декабря 2011

Регулярные выражения не нужны для хороших языков программирования, таких как Python:

  hashed = [ word for word in line.split() if word.startswith("#") ]
4 голосов
/ 02 декабря 2011

Вы можете использовать

compiled = re.compile(r'#\w*')
compiled.findall(line)

Выход:

['#Syrup', '#nshit', '#thebluntislit']

Но есть проблема. Если вы будете искать строку как 'blahblahblah #Syrup #nshit #thebluntislit beg#end', на выходе будет ['#Syrup', '#nshit', '#thebluntislit', '#end'].

Эту проблему можно решить с помощью положительного взгляда:

compiled = re.compile(r'(?<=\s)#\w*')

(здесь невозможно использовать \b (границу слова), поскольку # не входит в число \w символов [0-9a-zA-Z_], которые могут составлять слово, граница которого ищется).

1 голос
/ 02 декабря 2011

Похоже, re.findall() будет делать то, что вы хотите.

matches = re.findall(r'#\w*', line)
...