我是正则表达式的新手。有人可以帮助我在正则表达式中拆分下面的数据。我尝试使用正则表达式\\\\,
,但它在括号内和外部也用逗号分隔。应该跳过大括号[]
内的逗号。
输入
[111,212],[231,543],[231,423]
输出
[111,212]
[231,543]
[231,423]
答案 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的答案 - 它允许你捕获两个你可能想要的数字。