2015-09-13 226 views
1

我需要一个纯的正则表达式(没有语言)以分离该输入阵列的数字:正则表达式从逗号分隔号分隔的列表

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)

我试图此正则表达式[^;,]*,但它不是能够分别获得每个数据正则表达式。

谁能帮我看这个问题?

+1

你能帮助我们理解为什么这必须是纯粹的正则表达式?这不是最好的工具。 –

+0

要获得每个字段,你需要一个单独的捕获组 – dawg

+1

不会'L'(\ d +)'足矣,你都可能会根据语言相匹配的数组你areusing –

回答

0

试图提炼耶的做法,使得更少的捕获组被使用:

第四栏可以匹配

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

Online Test

第五个字段可以通过匹配

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

3

随着 '纯正则表达式' 让每一个领域,你必须使用单独的捕捉组:

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

Demo

(注:在Python,Perl中,红宝石,爪哇,等等,你可以有一个全球性的发现和捕捉像/(\d+)/g但毕竟是语言收拾比赛进入列表...)


如果你只想要一个特定的领域,你可以使用编号重复。

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

捕获组3将永远是场N-1所以要捕捉213,第15场,在你的榜样:

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

Demo2

+0

我赞赏你的帮助,但也许我不是很清楚。例如,我的问题是,我需要一个正则表达式让我们说只得到第四列。在你的表达中,我们同时获得了所有的列。 –

+1

看到编辑,你可以做'^ L(\ d)(,(\ d +)){N}' – dawg

+0

我试过了,但它除了列上的严格数字之外还捕获了很多组。我试过^ L \ d(,\ d +){14},但它仍然得到逗号..任何方式抛出该逗号? –

相关问题