Ruby 被多个分隔符分割

Ruby 被多个分隔符分割,ruby,regex,string,Ruby,Regex,String,我收到一个字符串,其中包含两个不同格式的数字: “344345”,“334433”,“345x532”和“432345” 我需要使用split将它们拆分为一个数组中的两个独立数字,然后使用Integer(num)转换它们 到目前为止,我所尝试的: nums.split(/[\s+,x]/) # split on one or more spaces, a comma or x 但是,在测试时,它似乎不匹配多个空格。此外,上面显示的逗号版本中不允许有空格(“344345”) 如何匹配多个分隔符?

我收到一个字符串,其中包含两个不同格式的数字:

“344345”
“334433”
“345x532”
“432345”

我需要使用
split
将它们拆分为一个数组中的两个独立数字,然后使用
Integer(num)
转换它们

到目前为止,我所尝试的:

nums.split(/[\s+,x]/) # split on one or more spaces, a comma or x
但是,在测试时,它似乎不匹配多个空格。此外,上面显示的逗号版本中不允许有空格(
“344345”


如何匹配多个分隔符?

您在模式中使用的是字符类,它只匹配一个字符
[\s+,x]
匹配1个空格,或一个
+
x
。您打算使用
(?:\s+|x)

然而,也许仅仅一个
\D+
(1个或更多非数字字符)就足够了:

"345, 456".split(/\D+/).map(&:to_i)
测试时,它似乎不匹配多个空格

是的,字符类(方括号)不是这样工作的。可以对类本身而不是对其字符应用量词。您可以使用
|
操作符。大概是这样的:

.split(%r[\s+|,\s*|x])

您的原始正则表达式将进行轻微调整,以将“+”符号移到字符类之外:

"344 ,x  345".split(/[\s,x]+/).map(&:to_i) #==> [344,345]
如果示例实际上是您将遇到的唯一格式,那么这将非常有效。但是,如果您必须更加灵活,并在数字之间容纳未知的分隔符,最好使用Wiktor给出的答案:

"344 ,x  345".split(/\D+/).map(&:to_i) #==> [344,345]

这两种情况都将从给定的输入返回一个整数数组,但是第二个示例更健壮,更容易一眼就能理解。

如果字符串不包含浮点数,您可以使用
nums.split(/\D+/)
谢谢!好奇的是,我需要额外的什么来匹配小数?如果字符串是预先验证的(只包含小数、逗号(或-x)-分隔的,您可以使用(
“345.56456.466”).split(/[^\d.]+/).map(&:to_f)
),您还可以尝试更常见的匹配技术:
"344 ,x  345".split(/\D+/).map(&:to_i) #==> [344,345]