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]

最初の用語だけでなく、「#」で始まるすべての用語。

4

3 に答える 3

21

Python のような優れたプログラミング言語では、正規表現は必要ありません。

  hashed = [ word for word in line.split() if word.startswith("#") ]
于 2011-12-01T20:10:04.573 に答える
4

使用できます

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_]

于 2011-12-01T20:11:04.463 に答える
1

あなたが望むことをするように見えre.findall()ます。

matches = re.findall(r'#\w*', line)
于 2011-12-01T20:10:26.563 に答える