我有以下字符串:
'pp_3', 365]
pp_
之后出现的长度可能不同。 ,
之后和]
之前是我想要捕获的(且仅此)。它的长度各不相同,但始终是数字。
我想出了(?<=pp_).*,(.*)(?=])
。它给出(?<=pp_).*,(.*)(?=])
作为完全匹配,在第1组中有我想要的“ 365”。我如何只获得3', 365
的完全匹配?
[如果无法解释我的疑问,请告诉我。谢谢
尝试使用此表达式。第二组应该是您所追求的:
365
仅匹配数字,并且如果您想使用正向后视,则可以在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+)]
尝试一下:
Regex demo
此正则表达式捕获2组,分别对应于每个数字,第一个在[^_]*_(\d*)'\s*,\s*(\-?\d+)\s*].
之后,第二个在pp_
之后(可能为负数)。如果您不想将第一个捕获为一组,而不是',
,只需编写(\d*)
。