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

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

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

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

Q&A

解決済

6回答

351閲覧

Rubyを使って、入力されたアルファベットから大文字を抽出し、抽出した文字を重複なしで表示するプログラムを作成したい

Eston

総合スコア67

Ruby

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

0グッド

0クリップ

投稿2018/02/13 08:18

編集2018/02/13 08:33

入力されたアルファベットから大文字を抽出し、抽出した文字を重複なしで表示するプログラムを作成したいです。

言語はRubyでUNIXを使っています。

例えば、
入力が
aBBCdeFg

だとすると、
出力は、
BCF
のようにしたいです。

調べたところ、最初の文字を大文字にしたり、大文字と小文字を変換することはできるらしいのですが、大文字だけを抽出して取得する方法がわかりませんでした。

重複無しで表示するやり方も教えていただけると助かります。

初歩的な質問かも知れませんが、よろしくお願いします。

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

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

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

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

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

guest

回答6

0

大文字だけを抽出して

"aBBCdeFg".scan(/[[:upper:]]/)

重複無しで

"aBBCdeFg".scan(/[[:upper:]]/).uniq

表示

"aBBCdeFg".scan(/[[:upper:]]/).uniq.join

投稿2018/02/13 12:58

otn

総合スコア84555

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

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

0

みなさんの回答に対する補足として,正規表現での大文字の表し方について一言。

[[:upper:]] における [:upper:] は POSIX 文字クラスと呼ばれるもの。
外側の [ ][a-z] のような文字クラスを表すスクエアブラケットです。
[ ] の中に

rb

1[[:lower:][:digit:]]

のように POSIX 文字クラスを複数併記することもできます。

[:upper:]A から Z まで(つまり ASCII の大文字)のみならず非 ASCII の大文字(全角のラテン文字やギリシャ文字,キリル文字,アルメニア文字など)も含むことに注意しましょう。

これは

rb

1\p{Lu}

とも書けます。\p{ } は,Unicode プロパティーを使った文字クラス表記です。中に Unicode プロパティー名を書きます。
Unicode プロパティーにはいろんな種類がありますが,Lu は「Character Category」と呼ばれるプロパティーの一つで,「Letter, Uppercase」を意味します。

ASCII の大文字に限定するなら

rb

1[A-Z]

と書きます。

公式リファレンスの 正規表現 の下記の項をぜひご覧ください。

  • Unicode プロパティによる文字クラス指定
  • POSIX 文字クラス

投稿2018/02/13 17:50

scivola

総合スコア2108

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

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

0

ベストアンサー

p "aBBCdeFg".chars.grep(/[[:upper:]]/).uniq.join

かな

投稿2018/02/13 08:38

asm

総合スコア15147

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

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

Eston

2018/02/13 08:44

なんどもすみません。 ありがとうございます。 うまく実装できました。
guest

0

Rubyなど不要。そう、シェル芸ならね!

bash

1$ echo aBBCdeFg|grep -o '[A-Z]'|sort -u|tr -d '\n';echo 2BCF

投稿2018/02/13 08:28

hichon

総合スコア5737

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

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

Eston

2018/02/13 08:34

回答ありがとうございます。これはこれで大変勉強になりました。しかし、現在Rubyに腰を据えて学習しようと考えておりまして、よろしければRubyのやり方もご教授いただけると助かります。
guest

0

英大文字だけをとりだす。(記号、SPACE, 漢字なども除外する)

ruby

1"aBBCdeFgABC @+あ".gsub(/[^[:upper:]]/, '') 2=> "BBCFABC"

さらに重複を除く。

ruby

1"aBBCdeFgABC @+あ".gsub(/[^[:upper:]]/, '').chars.uniq.sort.join 2=> "ABCF"

sort, uniq をつかわない方法もある。(多分 出現順を保つ)

ruby

1"aBBCdeFgABC @+あ".gsub(/[^[:upper:]]/, '').chars.group_by{|x| x}.keys.join 2=> "BCFA"

投稿2018/02/13 14:21

katoy

総合スコア22324

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

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

Eston

2018/02/14 00:53

とても詳しい解説、ありがとうございます。勉強になります。
guest

0

gsubで小文字を削除して、squeezeで重複を削除しました。

ruby

1 "aBBCdeFg".gsub(/[a-z]/, '').squeeze #=> "BCF"

ただ、squeezeは連続した重複だけなので

ruby

1"aBBCdeFg".gsub(/[a-z]/, '').chars.uniq.join #=> "BCF"

ですかね

投稿2018/02/13 08:41

編集2018/02/13 08:54
y-doi

総合スコア322

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

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

Eston

2018/02/13 08:45

なるほど、様々な方法があるのですね。 勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問