2011-12-01 48 views
0

我有一个字符串,像这样:"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] 

所有以'#'开头的术语而不是第一个术语。不需要

回答

1

貌似re.findall()会做你想要什么。

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

正则表达式具有良好的编程语言如Python:

hashed = [ word for word in line.split() if word.startswith("#") ] 
+0

我打电话给BS。是否需要正则表达式不取决于语言,而取决于用例。使用正则表达式有很好的理由,尽管这可能不是一个。无论如何,很好的答案。 – middus

+4

Python太性感了不是吗?! :-) – gecco

+0

好吧,这只适用于所有条款都是空格分隔的情况。另外,知道Mikko有一个反对正则表达式的议程,我会声明它不是数学意义上的正则表达式,而是不好的braindamaged语法。 –

3

您可以使用

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_]可能构成其边界是作为字之间搜索)。

相关问题