Python noob在这里。 (完全披露)
我有一个格式为字符串列表的推文列表,如下所示:
["This is a string that needs processing #ugh #yikes",
"this string doesn't have hashtags",
"this is another one #hooray"]
我正在尝试编写一个函数,该函数将在每行中创建一个主题标签列表,但在没有任何条目时会留下空白条目。这是因为我想稍后将这个列表与推文结合起来。这是我想要的输出:
['#ugh', '#yikes'], [], ['#hooray']
我发现here这个函数适用于一个字符串。
mystring = "I love #stackoverflow because #people are very #helpful!"
但它似乎不适用于几个字符串。这是我的代码:
l = len(mystringlist)
it = iter(mystringlist)
taglist = []
def extract_tags(it,l):
for item in mystringlist:
output = list([re.sub(r"(\W+)$", "", j) for j in list([i for i in
item.split() if i.startswith("#")])])
taglist.append(output)
multioutput = extract_tags(mystringlist,l)
print(multioutput)
答案 0 :(得分:1)
您可以使用正则表达式和re.findall
。
#\w+
将匹配主题后跟任意字符的主题标签,相当于[a-zA-Z0-9_]
x = ["This is a string that needs processing #ugh #yikes",
"this string doesn't have hashtags",
"this is another one #hooray"]
import re
hashtags = [re.findall('#\w+', i) for i in x]
print(hashtags)
输出:
[['#ugh', '#yikes'], [], ['#hooray']]
如果正则表达式不匹配任何内容,将返回一个空列表,如您所需的输出所示。
如果您的文字可能包含urls
,例如www.mysite.com/#/dashboard
,则可以使用:
确保在空格后或行的开头找到主题标签。
答案 1 :(得分:1)
对于手头的任务,这可能被认为是不可读的或过度的,但是避免使用正则表达式,因此应该更快一些:
>>> def hashtags(tweet):
.... return list(filter(lambda token: token.startswith('#'), tweet.split()))
>>> [hashtags(tweet) for tweet in tweets]
[['#ugh', '#yikes'], [], ['#hooray']]