红宝石正则表达式分裂困难,关闭但不完全

时间:2010-10-22 22:06:34

标签: ruby regex split

我很难在ruby中使用正则表达式来分割沿着几个分隔符的字符串,这些分隔符是:

  • /
  • &安培;

这些分隔符中的每一个都可以在分隔符的任一侧具有任意数量的空白空间,但每个项目可以包含有效空间。 我一直在测试的一个很好的例子是字符串1, 2 /3 and 4 12

我想要的是"1, 2 /3 and 4 12".split(regex) =>["1", "2", "3", "4 12"]

的内容

我能得到的最接近的是/\s*,|\/|&|and \s*/,但这会产生["1", " 2 ", "3 ", "4 12"]而不是预期的结果。

意识到这是非常接近的,我可以简单地修剪每个项目,但是如此接近并且知道可以做到这有点让我发疯。希望有人可以帮我保持疯狂。

3 个答案:

答案 0 :(得分:3)

/\s*,|\/|&|and \s*/

这解析为/(\s*,)|\/|&|(and \s*)/。即前导\s*仅适用于逗号,尾随\s*仅适用于“和”。你想要:

/\s*(,|\/|&|and )\s*/

或者,为了避免捕获:

/\s*(?:,|\/|&|and )\s*/

答案 1 :(得分:1)

尝试.scan

irb(main):030:0> "1, 2 /3 and 4 12".scan(/\d+(?:\s*\d+)*/)
=> ["1", "2", "3", "4 12"]

答案 2 :(得分:1)

您可以尝试:

(?:\s*)[,\/](?:\s*)|(?:\s*)and(?:\s*)

但正如Nakilon建议的那样,你可能会有更好的扫描而不是分裂。