[英]Split by multiple delimiters
我收到一個字符串,其中包含兩種不同格式的數字:
"344, 345"
"334,433"
, "345x532"
, "345x532"
和"432 345"
我需要把它們分為兩個單獨的號碼在使用陣列split
,然后使用它們轉換Integer(num)
到目前為止我嘗試過的:
nums.split(/[\s+,x]/) # split on one or more spaces, a comma or x
但是,測試時似乎不匹配多個空格。 此外,它不允許上面顯示的逗號版本中的空格( "344, 345"
)。
如何匹配多個分隔符?
您在模式中使用了一個字符類,它只匹配一個字符。 [\\s+,x]
匹配1個空格或+
,
或x
。 你打算使用(?:\\s+|x)
。
但是,或許,僅僅\\D+
(1個或更多非數字字符)就足夠了:
"345, 456".split(/\D+/).map(&:to_i)
R1 = Regexp.union([", ", ",", "x", " "])
#=> /,\ |,|x|\ /
R2 = /\A\d+#{R1}\d+\z/
#=> /\A\d+(?-mix:,\ |,|x|\ )\d+\z/
def split_it(s)
return nil unless s =~ R2
s.split(R1).map(&:to_i)
end
split_it("344, 345") #=> [344, 345]
split_it("334,433") #=> [334, 433]
split_it("345x532") #=> [345, 532]
split_it("432 345") #=> [432, 345]
split_it("432&345") #=> nil
split_it("x32 345") #=> nil
你的原始正則表達式可以通過一個小調整來移動字符類之外的'+'符號:
"344 ,x 345".split(/[\s,x]+/).map(&:to_i) #==> [344,345]
如果這些示例實際上是您將遇到的唯一格式,那么這將很有效。 但是,如果您必須更靈活並且在數字之間容納未知的分隔符,那么您最好使用Wiktor給出的答案:
"344 ,x 345".split(/\D+/).map(&:to_i) #==> [344,345]
兩種情況都會從給定的輸入返回一個整數數組,但第二個例子更加健壯,一目了然更容易理解。
它在測試時似乎不匹配多個空格
是的,字符類(方括號)不能像這樣工作。 您對類本身應用量詞,而不是對其字符應用。 你可以使用|
而不是運營商 像這樣的東西:
.split(%r[\s+|,\s*|x])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.