Ruby中最简单的方法是将字符串的一部分与另一个值互换。让我们说我有一封电子邮件,我想在两个域上查看,但我不知道哪一个我会得到一个输入。我建立的应用应与@ gmail.com和@ googlemail.com域合作。
示例:
swap_string 'user@gmail.com' # >>user@googlemail.com
swap_string 'user@googlemail.com' # >>user@gmail.com
答案 0 :(得分:5)
如果您正在寻找用其他东西替换字符串的一部分,gsub可以很好地工作。
它允许您将字符串的一部分与正则表达式匹配,然后用另一个字符串替换该部分。当然,代替正则表达式,您只需使用特定的字符串。
示例:
"user@gmail.com".gsub(/@gmail/, '@googlemail')
等于
user@googlemail.com
在我的示例中,我使用了@gmail和@googlemail,而不仅仅是gmail和googlemail。这样做的原因是为了确保它不是名称中包含gmail的帐户。这不太可能,但可能会发生。
不要与.com匹配,因为这可能会根据用户的电子邮件地址而改变。
答案 1 :(得分:1)
假设googlemail.com
和gmail.com
是唯一的两种可能性,您可以使用sub
替换给定替换的模式:
def swap_string(str)
if str =~ /gmail.com$/
str.sub("gmail.com","googlemail.com")
else
str.sub("googlemail.com","gmail.com")
end
end
swap_string 'user@gmail.com'
# => "user@googlemail.com"
swap_string 'user@googlemail.com'
# => "user@gmail.com"
答案 2 :(得分:1)
您可以尝试使用Ruby gsub:
例如:
"user@gmail.com".gsub("gmail.com","googlemail.com");
根据您在函数中传递字符串参数的需要,这应该:
def swap_mails(str)
if str =~ /gmail.com$/
str.sub('gmail.com','googlemail.com');
else
str.sub('googlemail.com','gmail.com');
end
end
swap_mails "vgmail@gmail.com" //vgmail@googlemail.com
swap_mails "vgmail@googlemail.com" ////vgmail@gmail.com
答案 3 :(得分:0)
String
以String#[]的形式有一个巧妙的伎俩:
def swap_string(string, lookups = {})
string.tap do |s|
lookups.each { |find, replace| s[find] = replace and break if s[find] }
end
end
# Example Usage
lookups = {"googlemail.com"=>"gmail.com", "gmail.com"=>"googlemail.com"}
swap_string("user@gmail.com", lookups) # => user@googlemail.com
swap_string("user@googlemail.com", lookups) # => user@gmail.com
允许lookups
传递给您的方法使其更具可重用性,但您可以轻松地在方法本身内部使用该哈希。
答案 4 :(得分:0)
我的补充:
def swap_domain str
str[/.+@/] + [ 'gmail.com', 'googlemail.com' ].detect do |d|
d != str.split('@')[1]
end
end
swap_domain 'user@gmail.com'
#=> user@googlemail.com
swap_domain 'user@googlemail.com'
#=> user@gmail.com
这是糟糕的代码,imo。