2010-12-12 7 views
4

誰でも、文字列の外側の引用符で動作するRuby gem(または組み込みの、または固有の構文)を知っていますか?文字列の外部引用符を変更するためのrubyコード?

私は自分自身が何度も何度もこのような方法を書い見つける:

remove_outer_quotes_if_quoted(myString, chars) -> aString 
add_outer_quotes_unless_quoted(myString, char) -> aString 

その開始と終了の文字がcharsに任意の1つの文字に一致するかどうかを確認するために最初のテストmyStringを。そうであれば、引用符を削除した文字列を返します。それ以外の場合は、そのまま返します。 charsはデフォルトで引用符文字のリストになります。

第2テストmyStringは、すでに開始されているかどうかを確認してから、charで終了します。そうであれば、文字列をそのまま返します。そうでない場合は、前後に「char」と書かれた文字列が返され、埋め込まれた出現箇所は「char」でバックスラッシュでエスケープされます。 charはデフォルトの文字のリストの最初のものにデフォルト設定されています。

(私の手石畳の方法はもちろん、このような冗長な名前を持っていません。)

私は公共のレポに類似した方法のために周りを見回しましたが、このような何かを見つけることができません。私はこれをやる必要がある唯一の人ですか?もしそうでなければ、他の誰もこれをどうやってやるのだろう?

+6

あなたは*あなたがこれに多くを行う理由*を見てみたいことがあります。ちょっとした根本原因分析は、コードをきれいにするのに役立ちます。 –

+1

@マーク・トーマス:あなたのコメントをより多く投票できたら、私はそうするでしょう。私には深い根底にある問題があるように思えるので。 – mpd

+0

Heh heh。根本的な原因は、私がいくつかの異なるAPIを使って作業していることです。それぞれのAPIは、同じデータを少しずつ違った方法で引用しています。私は本当にそれらを支配していません。 – Blue

答えて

2

これは「splainどのように削除し、それらを追加することがあります

str1 = %["We're not in Kansas anymore."] 
str2 = %['He said, "Time flies like an arrow, Fruit flies like a banana."'] 

puts str1 
puts str2 

puts 

puts str1.sub(/\A['"]/, '').sub(/['"]\z/, '') 
puts str2.sub(/\A['"]/, '').sub(/['"]\z/, '') 

puts 

str3 = "foo" 
str4 = 'bar' 

[str1, str2, str3, str4].each do |str| 
    puts (str[/\A['"]/] && str[/['"]\z/]) ? str : %Q{"#{str}"} 
end 

元の2行:

# >> "We're not in Kansas anymore." 
# >> 'He said, "Time flies like an arrow, Fruit flies like a banana."' 

ストリップ引用符:必要なときに引用符を追加

# >> We're not in Kansas anymore. 
# >> He said, "Time flies like an arrow, Fruit flies like a banana." 

# >> "We're not in Kansas anymore." 
# >> 'He said, "Time flies like an arrow, Fruit flies like a banana."' 
# >> "foo" 
# >> "bar" 
+0

提案していただきありがとうございます。私は自分自身の方法を書いています(クリスマスの前の夜Twasと他の異常の中ではこれは非論理的です)が、私がここで車輪を再構築しているかどうか疑問に思っていました。 – Blue

4

あなたはそれを多くを行う場合は、文字列にメソッドを追加することもできます。

class String 
    def strip_quotes 
    gsub(/\A['"]+|['"]+\Z/, "") 
    end 
end 

次に、あなただけのstring.strip_quotesを呼び出すことができます。引用符を追加する

は似ています

class String 
    def add_quotes 
    %Q/"#{strip_quotes}"/ 
    end 
end 

これはstring.add_quotesと呼ばれ、二重引用符を追加する前にstrip_quotesを使用しています。

+0

上記のコードは、不一致の引用符を取り除く可能性があり、文字列の両端から複数の引用符を削除することに注意してください。 – TJChambers

0

私はvalue = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0])を使用します。要するに、この単純なコードは、文字列の最初の文字と最後の文字が同じかどうかをチェックし、単精度または二重引用符の場合はそれらを削除します。さらに、必要な数の見積もりタイプを追加することができます。

%w["adadasd" 'asdasdasd' 'asdasdasd"].each do |value| 
    puts 'Original value: ' + value 
    value = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0]) 
    puts 'Processed value: ' + value 
end 

上記の例では、次のように出力されます:

Original value: "adadasd" 
Processed value: adadasd 
Original value: 'asdasdasd' 
Processed value: asdasdasd 
Original value: 'asdasdasd" 
Processed value: 'asdasdasd" 
関連する問題