0

最初の出現で始まり@、終わる部分文字列を探しています。文字列の先頭またはスペースの後にある\s必要があります。@

@one bla bla bla @two @three@four #@five

結果:@one, @two, @three@four

私はこの re:((?<=\s)|(?<=^))@[^\s]+で終わります。これは崇高なテキスト 2 では正常に動作しますが、Python では空の文字列を返します。

パイソンコード:

re.findall(r'((?<=^)|(?<=\s))@[^\s]+', '@one bla bla bla @two @three@four #@five')
4

2 に答える 2

2

正規表現を使用したくない場合は、次を試すことができます。

>>> s ="@one bla bla bla @two @three@four #@five"
>>> filter(lambda x:x.startswith('@'), s.split())
['@one', '@two', '@three@four']

これは実際にははるかに高速なはずです...

于 2012-12-21T06:53:16.063 に答える
0

キャプチャグループは、本当に探しているテキストをキャプチャしていません。

(?:(?<=^)|(?<=\s))(@[^\s]+)

今、それは動作します:

>>> re.findall(r'(?:(?<=^)|(?<=\s))(@[^\s]+)', '@one bla bla bla @two @three@four #@five')
['@one', '@two', '@three@four']
于 2012-12-21T06:45:43.747 に答える