簡體   English   中英

如何使用“ 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]|$)/, '\1')

但是我不清楚如果有多個(例如兩個)要替換的東西該怎么做。

您可能會擺脫這種情況:

def dashreplace(str)
  str.sub(/\b(\d)\-(\d)\b/) do |s|
    '%02d-%02d' % [ $1.to_i, $2.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' % [$1,$2,$3] : s
end 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM