Как я могу получить все термины, начиная с «#»?

StackOverflow https://stackoverflow.com/questions/8347567

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть такая строка: "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_] который может представлять собой слово, какое границу обыскивается).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top