
rubyの正規表現について質問です。
rubyを勉強中ですが、
正規表現について質問させてください。
以下のようなことをしたいのですが、どのような記述をすれば実現できるでしょうか?
(1)test → #test
(2)test → test
「test」の場合は、「#」を加え、「#test」に置換したい
「test」の場合は、そのまま「test」としたい。
if を続ければ可能だとは思いますが、
一つの正規表現で(1)のケースだけを引っ掛けられればと思っています。
正規表現でANDが使えればよいのですが、使えないようですし。。。
お手数をおかけしますが、お力をよろしくお願いします。

No.2
- 回答日時:
(1)testと(2)testの違いは、先頭に(1)があるか(2)があるかの違いでしょうか?
それなら、正規表現を使うまでもありません。
文字列が'(1)test'なら、'#test’に変換し、
文字列が'(2)test'なら、'test’に変換するだけです。
以下のソースで確認済み
-----------------------------
# coding:WINDOWS-31J
def test1()
moji1 = '(1)test'
moji2 = '(2)test'
moji3 = 'test'
ans1 = cnv(moji1)
ans2 = cnv(moji2)
ans3 = cnv(moji3)
p ans1
p ans2
p ans3
end
#文字列を変換した結果を返す
# (1)test -> #test
# (2)test -> test
#以外 そのまま
def cnv moji
if moji == '(1)test'
return '#test'
end
if moji == '(2)test'
return 'test'
end
return moji
end
test1()
--------------------------------
実行結果
"#test"
"test"
"test"
説明が曖昧で申し訳ありません。
(1),(2)は不要です。
やりたかったのは、下記になります。
test → #test
test → test
No.1
- 回答日時:
注意力が足りなりのかもしれませんが、(1)と(2)の違いがよく分からないです。
変換元が両方testに見えますので、どのような条件なのか補足をお願いします。文字列の置換は、Stringクラスのgsub(全ての文字列が対象)かsub(最初に見つかった文字列が対象)を使うのが一般的です。
http://doc.okkez.net/static/187/method/String/i/ …
http://doc.okkez.net/static/187/method/String/i/ …
正規表現のリファレンスはこちら。
http://doc.okkez.net/static/187/doc/spec=2fregex …
p 'test1test2'.gsub(/test/,'#test')
p 'test1test2'.gsub(/(test)/,'#\1')
p 'test1test2'.gsub(/(test)/){ '#' + $1 }
=> "#test1#test2"
p 'test1test2'.sub(/test/,'#test')
=> "#test1test2"
「ある条件の場合のみ置換し、それ以外の場合は置換しない」のであれば、それ程苦労せずに(分岐なしに)記述できると思います。
複雑な条件では、ブロックに渡して、条件分岐など使えば何とかなります。
p '(1)test (2)test'.gsub(/\(([0-9]+)\)test/) {|s| $1=='1' ? '#test' : 'test' }
"#test test"
もしくは、何度かに分けて置換を行うのも手です。
str='(1)test (2)test'
=> "(1)test (2)test"
str = str.gsub(/\(1\)test/,'#test')
=> "#test (2)test"
str = str.gsub(/\([0-9]+\)test/,'test')
=> "#test test"
基本的なことは、分かっていらっしゃるのかも知れませんが。
ご回答ありがとうございます。
(1),(2)は不要です。
やりたかったのは、下記になります。
test → #test
test → test
やはり、組み合わせや条件分岐するのが良さそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
CSSのhtmlへの紐付けについ...
-
100万件越えCSVから条件を満た...
-
(再質問)エクセルのマクロボ...
-
ビーリアルのユーザー名を変え...
-
【VBA】複数シートのデータを1...
-
pandasでsqlite3にテーブル作成...
-
教えてください
-
プログラミング言語 R
-
rubyの正規表現について
-
C++のCreateFile関数で、ASCII...
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ruby require ライブラリー
-
ruby loopメソッド 変数(再喝)
-
(再質問)エクセルのマクロボ...
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数
-
1、Rstudioで回帰直線を求める...
-
パソコンのスクリーンセーバー...
-
ビーリアルのユーザー名を変え...
-
ruby 配列
-
C言語の入力した文字を反転させ...
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
100万件越えCSVから条件を満た...
-
ルビー言語 csvファイル 続き
-
Ruby newメソッド
-
教えてください
-
ruby raise句
-
英数字を含む文字列(0-9,A-Z)...
-
pythonエラー
おすすめ情報