在逗号之前匹配字符串的正则表达式,除非文本包含也用逗号分隔的被扣紧列表

时间:2015-01-26 14:10:41

标签: ruby regex lookahead

让我们说这是我的文字:

"a, b, c (1, 2, 3), d, f (x, y)"

我想匹配枚举的每一点,但我也不希望子列表逗号被解释为终止字符。我想要一个正则表达式来提取以下匹配项:

a
b
c (1,2,3)
d
f (x, y)

我尝试使用可选的前瞻,但我根本无法使其正常工作。

1 个答案:

答案 0 :(得分:3)

您可以使用string.split功能。

> "a, b, c (1, 2, 3), d, f (x, y)".split(/,\s*(?![^()]*\))/)
=> ["a", "b", "c (1, 2, 3)", "d", "f (x, y)"]

以上正则表达式将匹配所有逗号和以下零个或多个空格,前提是它后面没有( [^()]*任何字符但不是() 0或更多次和结束括号)