2017-04-26 4 views
0

余分な文字で囲まれた電子メール文字列を整理しようとしています。次のように私が使用しています方法は次のとおりです。すべての文字を削除するRubyで角括弧を後につける

def email_clean(email) 
    email = email.gsub(/(<+\w)/, "") 
    email = email.gsub(/(>+\w)/, "") 
    email = email.gsub(/(\w+=)/,"") 
    email = email.gsub(/(\w+:)/, "") 
    email = email.gsub!(/\A"|"\Z/, '') 
    email = email.delete('"') 
    return email 
end 

私は、次の例の文字列でそれを呼んでいる:私はしようとしています

[email protected]*********.coman 

email_clean("href="mailto:[email protected]*********.com"><span") 

そして、次の出力を取得します最初の2つのgsub呼び出しが山括弧を削除するときに後ろの "an"を削除しなかった理由を理解する。ここ

+0

すべての文字列は次のとおりです: '" href = "mailto:email">

+0

@ sagarpandya82現時点では、必ずしも将来のテストケースではありません。理想的には、私はきれいにする必要がある広範囲の電子メールを処理するメソッドを作成したいと思います。 – HMLDude

+0

周囲の文字を取り除くのではなく、 'mailto:[電子メールアドレス]'部分を抽出してみませんか? –

答えて

1

あなたの正規表現は問題です:

email = email.gsub(/(<+\w)/, "") 

これは、単一の単語文字が続く一つ以上の<の文字を削除します。あなたはおそらく意図していた:あなたが一緒にチェーンgsub操作、プラスあなたが稼がことができ

/<.*/ 

に注意してください:<は後

/<\w+/ 

は、あなたのデータをもとに、あなたはおそらく、すべてをゴミ箱ことができますが

MOPS = [ 
/<.*/, 
/\A"|"\Z/ 
] 

MOPS.inject(email) do |e, mop| 
    e.gsub(mop, '') 
end 
関連する問題