【问题标题】:regex to separate numbers from comma delimited list正则表达式将数字与逗号分隔的列表分开
【发布时间】:2015-12-09 08:18:15
【问题描述】:

我需要一个纯正则表达式(无语言)来分隔这个输入数组的数字:

L1,3,5,0,5,80,40,31,0,0,0,0,512,412,213,900

问题:

  1. 第一个字段 (L1) 是固定的。该数组将始终以 L1 开头。
  2. 其他字段将始终为 0 或正数。
  3. 但是我需要分别获取每个数据,所以应该是:
    第二个数据的正则表达式(示例中的数字 3)
    第三个数据的正则表达式(示例中的数字 5)
    ....
    第十六个数据的正则表达式(示例中的数字 900)

我尝试了这个正则表达式[^;,]*,但它无法分别获取每个数据。

谁能帮我解决这个问题?

【问题讨论】:

  • 你能帮助我们理解为什么这需要是纯正则表达式吗?这不是最好的工具。
  • 要获取每个字段,需要一个单独的捕获组
  • L?(\d+) 不够,您可能会根据您使用的语言获得一系列匹配项
  • 我和 dawg 有同样的想法,可惜这个表达式假设不超过 16 个值。这个数字是固定的还是有限的?
  • @mvw 这是一个固定的表达方式

标签: regex numbers comma delimited


【解决方案1】:

使用“纯正则表达式”获取每个字段,您必须使用单独的捕获组:

^L(\d),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)$

Demo

(注意:在 Python、Perl、Ruby、Java 等中,您可以像 /(\d+)/g 一样进行全局查找和捕获,但这是将匹配项收集到列表中的语言......)


如果您只需要一个特定字段,您可以使用编号重复。

^L(\d)(,(\d+)){N}

捕获组 3 将始终是字段 N-1,因此在您的示例中捕获第 15 个字段 213:

^L(\d)(,(\d+)){14}  

Demo2

【讨论】:

  • 感谢您的帮助,但也许我不是很清楚。我的问题是,我需要一个正则表达式,例如,仅用于获取第四列。在您的表达式中,我们同时获取所有列。
  • 好吧,我试过了,但是除了列的严格数字之外,它还捕获了很多组。我试过 ^L\d(,\d+){14} 但它仍然得到逗号..有什么办法可以把那个逗号扔掉吗?
  • 你没有嵌套括号(,(\d+)) 所以是的——逗号是匹配的一部分。我也不知道您用来提出不同建议的正则表达式的风格或功能。
【解决方案2】:

尝试改进 dawg 的方法,以便使用更少的捕获组:

第四个字段可以匹配

^L1(?:,(\d+)){3}

Online Test

第五个字段可以匹配

^L1(?:,(\d+)){4}

等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多