正则表达式从后面的组中提取值以及随后的重复

时间:2018-07-19 19:18:12

标签: regex regex-lookarounds

在JAVA程序中,我需要将文本输入与正则表达式模式进行匹配。简单来说,文本输入看起来像这样:"100|200|123,124,125"

上述匹配项的输出应找到三个匹配项,所有匹配项将返回两个固定的子组100200以及变量重复子组123/124/125

第1场-123 比赛2-124 匹配3-125。 这些匹配输出中的每一个还应在两个单独的组中包含100200

因此,基本上,匹配将针对诸如'100|200|123''100|200|124''100|200|125'之类的提取模式。

我使用了此正则表达式:(?<=(?:(?<first>\d+)\|(?<second>\d+)\|)|,)(?<vardata>\d+)(?=,|$)。 但我收到此错误:+ A quantifier inside a look-behind makes it non-fixed width

1 个答案:

答案 0 :(得分:1)

如上面的注释所述,您不能在Java正则表达式的lookbehind中使用可变长度断言。

但是您可以基于\G使用此正则表达式:

(?:(\d+)\|(\d+)\||(?<!^)\G,)(\d+)

RegEx Demo

RegEx详细信息:

  • \G在上一场比赛的末尾或首场比赛的字符串开头声明位置。
  • 您将在group(3)中循环得到逗号分隔的数字,而group(1)group(2)将从输入字符串中为您提供前2个数字。