rubyを使って漢数字を英数字に変換したいのですが困っています
「漢数字+号」以外の漢数字を英数字にしたいです
〇一二三四五六七八九をそれぞれ
〇を0に
一を1にしていきたいです。
下記のコードだと、
表示が[0-9]になってしまい困っています
ruby
1buffer = f.read() 2p buffer 3 4buffer.gsub!(/[〇一二三四五六七八九](?!号)/, '[0-9]');
参考にしたサイトはrubyで漢数字を数字に変換する方法 多分これが一番簡単だと思います()
です。
文章内の漢数字を残したい箇所と変換したい箇所とが混ざっているため
なかなかうまくできず困っています。
初歩的な質問だとは十分承知ですが
どなたかご教授いただけたらありがたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
buffer.gsub!(/([〇一二三四五六七八九])(?!号)/){$1.tr("〇一二三四五六七八九", '0-9')}
でどうでしょうか。
投稿2021/01/05 09:40
総合スコア5493
0
対応表を作って変換をかけていくのが応用も効いて楽かなと思います。
rb
1correspondence_table = %w[ 〇 一 二 三 四 五 六 七 八 九 ].zip([*'0'..'9']).to_h 2 3'一二三号'.gsub(/[〇一二三四五六七八九](?!号)/) { |s| correspondence_table[s] } 4#=> "12三号"
正規表現が正しいかどうかはわかりませんが、とりあえず漢数字で直後に「号」がつくもの以外は変換できます。
投稿2021/01/05 10:01
編集2021/01/05 10:03総合スコア2349
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
十とか拾とかを考えなくて良いなら、trのが楽
"〇一二三四五六七八九".tr("〇一二三四五六七八九", '0-9') => "0123456789"
追記
号の前が二桁以上になる場合は
buffer.split(/([〇一二三四五六七八九十百千]+号)/).map{|str| str =~ /号/ ? str : str.tr("〇一二三四五六七八九","0-9")}.join
以外も二桁以上になる場合は tr でなく、参照サイトのmethodを。
号なら万はいかないよね
投稿2021/01/05 08:00
編集2021/01/06 05:52総合スコア23567
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/05 09:50
2021/01/05 10:05
2021/01/05 22:44
2021/01/06 04:22
2021/01/06 05:24
2021/01/09 04:04
2021/01/09 08:55
2021/01/09 12:51
2021/01/14 04:42
2021/01/14 08:22
2021/01/14 15:04
2021/01/14 22:41
2021/01/17 12:20
2021/01/17 13:27
2021/01/19 02:34
2021/01/19 03:14
2021/01/19 07:53
2021/01/19 08:10
2021/01/20 13:02
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/05 10:06
2021/01/05 10:08
2021/01/05 14:21