【问题标题】:Regular Expression to use in Split function在拆分函数中使用的正则表达式
【发布时间】:2015-04-29 05:24:59
【问题描述】:

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

输入

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

输出

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

【问题讨论】:

    标签: python regex perl


    【解决方案1】:

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

    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]']
    

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

    【讨论】:

    • 谢谢。我需要 perl 或 python 中的正则表达式。
    • 没问题。使用 Python 解决方案为您编辑了答案。
    【解决方案2】:

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

    >>> 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]
    

    【讨论】:

    • 很好地认识到这里的 x-y 问题!问题要求拆分,但实际上只是提取列表。
    【解决方案3】:

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

    【讨论】:

    • 第一个失败,第二个把所有的逗号分开。(大括号内也是)
    • @HariKrishna - 如果你没有空格,两者都应该工作:regex101.com/r/nJ2eK6/3
    【解决方案4】:

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

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

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

    无论哪种方式,我都会选择 Hwnd 的答案 - 它允许您捕获两个数字,无论如何您可能都想要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      相关资源
      最近更新 更多