質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1376閲覧

ruby正規表現 #の処理 について教えてください

kkoaranomarch

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2017/09/10 03:22

###前提・実現したいこと
rubyを用いてtweetの本文抽出を行っています。

###発生している問題・エラーメッセージ
その際に、タグとして付与されている@***やhttp://***等は正規表現で削除できたものの、ハッシュタグである#***の処理がうまくいきません。

おそらく、rubyのコメントアウトが#を使うものであり、
ソースコード上で、コメントアウトとして機能していると考えます。

そこで'#'や'#'を試してみました。
すると、正規表現クラスgsub()では変換されないものの、文字列比較クラスmatch()では検出できました。

そのため、検出できていないわけではないようなのです。
しかし、gsub()関数では変換できなく終わっています。

この点でどうしたらよいかわからなくなりました。
また、検索しても正規表現で#を処理するものは出てこなかったためここで質問させてもらいました
ご検討のほど宜しくお願いします。

###該当のソースコード

【環境】ruby 2.4.1p111 【ソースコード】 # -*- coding: utf-8 -*- #mecabバインディング require 'natto' #Tweetファイル参照 tweet_file = File.open("./../data/tweet_mini.txt","r") #形態素解析 natto = Natto::MeCab.new tweet_file.each_line {|tweet_line| p tweet_line.split("\t")[3] #文章部分を対象 tweet = tweet_line.split("\t")[3] tweet = tweet.gsub(/@.* /, "") tweet = tweet.gsub(/#.*/, "") tweet = tweet.gsub(/ http:.*/, "") p tweet p tweet.match('\#') } 【実行結果】 "#tabi " "#tabi " #<MatchData "#"> "#" "#" #<MatchData "#">

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NCC1701

2017/09/10 03:39

サンプルとなるtweet_line.split("\t")[3]のデータを示していただけると、検証しやすくなります。tweet = "hogehoge#baz";tweet.gsub(/#.*/, "")を実行しても、正しくhogehogeの出力になりました。
kkoaranomarch

2017/09/11 06:37

ありがとうございます。tweet.gsub(/#.*? /, "")でできました。
guest

回答2

0

ベストアンサー

データが無いので、何がどうなっているのか分かりませんが、正規表現に於いて#は特殊文字ではありません。
また、

ソースコード上で、コメントアウトとして機能していると考えます。

というのも的外れです。
つまり、#はごく普通の文字ですので、その前提でもう一度プログラムを見直してください。

Rubyの正規表現リテラルに於いては、/#{式}/という表現もありますが、お書きのプログラムでは#の直後が{でないので、関係ありません。

投稿2017/09/10 11:50

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkoaranomarch

2017/09/11 06:38

tweet.gsub(/#.*? /, "")でできました 確かに#はXcode上ではコメントアウトのように見えましたが そのまま扱っても使用できました ありがとうございます
guest

0

事前にtweet.gsub(/#.*/, "")としてしまっている以上、ここでハッシュタグはすべて削除されます

さらに言えば、tweet.gsub(/@.* /, "")@以降の全文字を削除してしまうので、巻き込まれて消える分も多いかと思います。

投稿2017/09/10 06:57

編集2017/09/10 06:57
maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問