正则表达式捕获:仅从第二组获取结果

Regex capturing: get only result from second group

我有以下字符串:

'pp_3', 365]

pp_ 之后的内容可能有不同的长度。 , 之后和 ] 之前的内容是我想要捕获的(并且只有它)。它的长度各不相同,但始终是一个数字。

我想出了 (?<=pp_).*,(.*)(?=])。它给出 3', 365 作为完全匹配,在第 1 组中有我想要的“365”。如何只获得 365 作为完整匹配项?

如果我无法解释我的疑问,请告诉我。谢谢

试试这个表达式。第二组应该是你想要的:

(?<='pp_)(\d*', )(\d*)]

试试这个:

[^_]*_(\d*)'\s*,\s*(\-?\d+)\s*]. 

这个正则表达式捕获 2 个组,对应于每个数字,第一个在 pp_ 之后,第二个在 ', 之后(可能是负数)。如果你不想把第一个作为一组捕获,而不是 (\d*),只需写 (?:\d*).

为了只匹配数字,如果你想使用正后视,你可以在后视中使用量词(你可以自己指定),Java

(?<=pp_[^,]{0,1000}, )\d+(?=])

说明

  • (?<=正向后视,断言左边是
  • pp_[^,]{0,1000}匹配pp_,匹配除,以外的任意字符0-1000次
  • , 匹配逗号和 space
  • ) 关闭回顾
  • \d+ 匹配 1+ 个数字
  • (?=]) 正面前瞻,断言右边的是]

在Java

String regex = "(?<=pp_[^,]{0,1000}, )\d+(?=])";

Java demo

您也可以改用捕获组:

pp_[^,]*, (\d+)]

Regex demo