-1

文字列から#hashtagsを抽出したいのですが、。などの特殊文字を含むものも抽出したいと思います#1+1

現在使用しているもの:

@hashtags ||= string.scan(/#\w+/)

ただし、これらの特殊文字では機能しません。また、UTF-8と互換性があるようにしたいです。

どうすればよいですか?

編集:
最後の文字が特殊文字の場合は、などを削除する必要があり#hashtag, #hashtag. #hashtag! #hashtag?ます...

また、先頭のハッシュ記号を削除する必要があります。

4

3 に答える 3

1

ソリューション

あなたはおそらく次のようなものが欲しいでしょう:

'#hash+tag'.encode('UTF-8').scan /\b(?<=#)[^#[:punct:]]+\b/
=> ["hash+tag"]

一致の一部としてポンド記号をキャプチャしないようにするには、最初にゼロ幅アサーションが必要であることに注意してください。

参考文献

于 2012-06-05T14:03:55.050 に答える
0

これはどう:

@hashtags ||=string.match(/(#[[:alpha:]]+)|#[\d\+-]+\d+/).to_s[1..-1]

#alphabetsまたは#2323 + 2323#2323-2323#2323+65656-67676の世話をします

また、最初に#を削除します

または、配列形式で必要な場合:

 @hashtags ||=string.scan(/#[[:alpha:]]+|#[\d\+-]+\d+/).collect{|x| x[1..-1]}

うわー、これはとても時間がかかりましたが、私はまだなぜscan(/#[[:alpha:]]+|#[\d\+-]+\d+/)機能するのか理解していませんscan(/(#[[:alpha:]]+)|#[\d\+-]+\d+/)が、私のコンピュータでは機能しません。違いは()、2番目のスキャンステートメントにあります。これは、メソッドで使用する場合のように効果がありませんmatch

于 2012-06-05T13:54:22.203 に答える
0

これは機能するはずです:

@hashtags = str.scan(/#([[:graph:]]*[[:alnum:]])/).flatten

または、ハッシュタグを特殊文字で始めたくない場合は、次のようにします。

@hashtags = str.scan(/#((?:[[:alnum:]][[:graph:]]*)?[[:alnum:]])/).flatten
于 2012-06-05T14:52:07.143 に答える