在Split函数中使用的正则表达式

时间:2015-04-29 05:24:59

标签: python regex perl

我是正则表达式的新手。有人可以帮助我在正则表达式中拆分下面的数据。我尝试使用正则表达式\\\\,,但它在括号内和外部也用逗号分隔。应该跳过大括号[]内的逗号。

输入

[111,212],[231,543],[231,423]

输出

[111,212]
[231,543]
[231,423]

4 个答案:

答案 0 :(得分:2)

如果您确定逗号周围没有空格,则所需的拆分正则表达式为,(?=\[)

JavaScript中的示例:

$ node
> re = /,(?=\[)/
/,(?=\[)/
> "[111,212],[231,543],[231,423]".split(re)
[ '[111,212]', '[231,543]', '[231,423]' ]

Python中的示例:

$ python
>>> import re
>>> r = re.compile(r',(?=\[)')
>>> re.split(r, "[111,212],[231,543],[231,423]")
['[111,212]', '[231,543]', '[231,423]']

说明:,(?=\[)表示逗号后跟左括号。 (?=)中的表达式是正向前瞻,不会消耗。唯一用作分隔符的是逗号本身。但我们分开的唯一逗号是左括号后面的逗号。我们不会分开其他逗号。

答案 1 :(得分:2)

在Python中(基于您留下的评论),匹配所有与split字符串匹配:

>>> import re
>>> s = '[111,212],[231,543],[231,423]'
>>> m = re.findall(r'\[[^]]*]', s)
>>> for x in m:
...     print x

[111,212]
[231,543]
[231,423]

答案 2 :(得分:1)

您需要匹配后跟方括号或后跟数字的逗号。为此,您使用前瞻操作符。 ,(?=\[),(?!\d)都适合您。括号的内容不会成为匹配的一部分,只有逗号。

答案 3 :(得分:0)

如果您知道没有空格,可以使用,\B \B检查该逗号是否在非字母数字字符之前,如[(与\b相反)。

如果您可以有空位,可以使用\s*,\s*+\B
(仅限Perl,Python re不支持*+)。 \s*+是一个占有量词,用于确保消耗所有空格。

工作示例:https://regex101.com/r/nJ2eK6/1

无论哪种方式,我都会使用Hwnd的答案 - 它允许你捕获两个你可能想要的数字。