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

问题描述 投票:0回答:3

我有以下字符串:

'pp_3', 365]

pp_之后出现的长度可能不同。 ,之后和]之前是我想要捕获的(且仅此)。它的长度各不相同,但始终是数字。

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

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

java regex pattern-matching regular-language
3个回答
0
投票

尝试使用此表达式。第二组应该是您所追求的:

365

0
投票

仅匹配数字,并且如果您想使用正向后视,则可以在Java支持的后视中使用量词(可以自己指定)

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

说明

  • (?<=pp_[^,]{0,1000}, )\d+(?=]) 向后看,断言左边是
  • [(?<=匹配pp_[^,]{0,1000},匹配除pp_ 0-1000次以外的任何字符
  • [,逗号和空格匹配
  • , 关闭后视
  • )匹配1个以上的数字
  • \d+正向,断言右边是(?=])

使用Java

]

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

您也可以改用捕获组:

Java demo

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


0
投票

尝试一下:

Regex demo

此正则表达式捕获2组,分别对应于每个数字,第一个在[^_]*_(\d*)'\s*,\s*(\-?\d+)\s*]. 之后,第二个在pp_之后(可能为负数)。如果您不想将第一个捕获为一组,而不是',,只需编写(\d*)

© www.soinside.com 2019 - 2024. All rights reserved.