[英]Ruby: Matching a delimiter with Regex
我正在嘗試使用正則表達式模式解決此問題,即使我的測試通過了該解決方案,我也希望拆分為在數組內僅包含["1", "2"]
。 有更好的方法嗎?
irb測試 :
s = "//;\n1;2" # when given a delimiter of ';'
s2 = "1,2,3" # should read between commas
s3 = "//+\n2+2" # should read between delimiter of '+'
s.split(/[,\n]|[^0-9]/)
=> ["", "", "", "", "1", "2"]
產量 :
module StringCalculator
def self.add(input)
solution = input.scan(/\d+/).map(&:to_i).reduce(0, :+)
input.end_with?("\n") ? nil : solution
end
end
測試 :
context 'when given a newline delimiter' do
it 'should read between numbers' do
expect(StringCalculator.add("1\n2,3")).to eq(6)
end
it 'should not end in a newline' do
expect(StringCalculator.add("1,\n")).to be_nil
end
end
context 'when given different delimiter' do
it 'should support that delimiter' do
expect(StringCalculator.add("//;\n1;2")).to eq(3)
end
end
使用String#scan
非常簡單:
s = "//;\n1;2"
s.scan(/\d/) # => ["1", "2"]
/\\d/
- 一個數字字符( [0-9]
)
注意 :
如果您有如下所示的字符串,則應使用/\\d+/
。
s = "//;\n11;2"
s.scan(/\d+/) # => ["11", "2"]
您得到的數據看起來像這樣的字符串: //1\\n212
如果您將數據作為文件獲取,則將其視為兩行。 如果是字符串,則再次將其視為兩行。 無論哪種情況,看起來
//1
212
輸出時。
如果是字符串:
input = "//1\n212".split("\n")
delimiter = input.first[2] # => "1"
values = input.last.split(delimiter) # => ["2", "2"]
如果是文件:
line = File.foreach('foo.txt')
delimiter = line.next[2] # => "1"
values = line.next.chomp.split(delimiter) # => ["2", "2"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.