如何使用 'gsub' 进行多次替换?
How do I use 'gsub' to make multiple substiuttions?
我有一个字符串,在 "-"
的两边只包含一个数字,例如:
"1-3"
我想得到这样的结果
"01-03"
如果字符串在破折号的一侧有两个数字,例如:
"1-10"
那我不想做任何替换。我可以做一个 gsub
表达式,比如
str.gsub!(/(^|[^\d]])\d[[:space:]]*\-[[:space:]]*\d([^\d]|$)/, '')
但我不清楚如果有多个(例如两个)要替换的东西该怎么做。
你或许可以摆脱这个:
def dashreplace(str)
str.sub(/\b(\d)\-(\d)\b/) do |s|
'%02d-%02d' % [ .to_i, .to_i ]
end
end
dashreplace('1-2')
# => "01-02"
dashreplace('1-20')
# => "1-20"
dashreplace('99-1,2-3')
# => "99-1,02-03"
真的有必要在这里使用正则表达式吗?对我来说似乎太复杂了。假设您知道字符串的格式为:<digits><hyphen><digits>
,您可以这样做:
def pad_digits(string)
left_digits, right_digits = string.split('-')
if left_digits.length > 1 || right_digits.length > 1
string
else
"%02d-%02d" % [left_digits, right_digits]
end
end
pad_digits("1-3") # => "01-03"
pad_digits("1-10") # => "1-10"
这是@TomLord 回答的变体。
def pad_single_digits(str)
str.size > 3 ? str : "0%d-0%d" % str.split('-')
end
pad_single_digits "1-3" #=> "01-03"
pad_single_digits "1-10" #=> "1-10"
"0%s-0%s"
也有效。
你可以这样做:
def nums(s)
rtr=s[/^(\d)(\D+)(\d)$/] ? '0%s%s0%s' % [,,] : s
end
我有一个字符串,在 "-"
的两边只包含一个数字,例如:
"1-3"
我想得到这样的结果
"01-03"
如果字符串在破折号的一侧有两个数字,例如:
"1-10"
那我不想做任何替换。我可以做一个 gsub
表达式,比如
str.gsub!(/(^|[^\d]])\d[[:space:]]*\-[[:space:]]*\d([^\d]|$)/, '')
但我不清楚如果有多个(例如两个)要替换的东西该怎么做。
你或许可以摆脱这个:
def dashreplace(str)
str.sub(/\b(\d)\-(\d)\b/) do |s|
'%02d-%02d' % [ .to_i, .to_i ]
end
end
dashreplace('1-2')
# => "01-02"
dashreplace('1-20')
# => "1-20"
dashreplace('99-1,2-3')
# => "99-1,02-03"
真的有必要在这里使用正则表达式吗?对我来说似乎太复杂了。假设您知道字符串的格式为:<digits><hyphen><digits>
,您可以这样做:
def pad_digits(string)
left_digits, right_digits = string.split('-')
if left_digits.length > 1 || right_digits.length > 1
string
else
"%02d-%02d" % [left_digits, right_digits]
end
end
pad_digits("1-3") # => "01-03"
pad_digits("1-10") # => "1-10"
这是@TomLord 回答的变体。
def pad_single_digits(str)
str.size > 3 ? str : "0%d-0%d" % str.split('-')
end
pad_single_digits "1-3" #=> "01-03"
pad_single_digits "1-10" #=> "1-10"
"0%s-0%s"
也有效。
你可以这样做:
def nums(s)
rtr=s[/^(\d)(\D+)(\d)$/] ? '0%s%s0%s' % [,,] : s
end