入力されたアルファベットから大文字を抽出し、抽出した文字を重複なしで表示するプログラムを作成したいです。
言語はRubyでUNIXを使っています。
例えば、
入力が
aBBCdeFg
だとすると、
出力は、
BCF
のようにしたいです。
調べたところ、最初の文字を大文字にしたり、大文字と小文字を変換することはできるらしいのですが、大文字だけを抽出して取得する方法がわかりませんでした。
重複無しで表示するやり方も教えていただけると助かります。
初歩的な質問かも知れませんが、よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
大文字だけを抽出して
"aBBCdeFg".scan(/[[:upper:]]/)
重複無しで
"aBBCdeFg".scan(/[[:upper:]]/).uniq
表示
"aBBCdeFg".scan(/[[:upper:]]/).uniq.join
投稿2018/02/13 12:58
総合スコア84559
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
総合スコア2108
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア22324
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総合スコア322
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。