正则表达式负向前瞻与组

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

我尝试将正则表达式与负前瞻和组一起使用。不幸的是它没有按预期工作,所以我需要帮助。

我需要解析字符串末尾的尺寸(英寸),其格式可以是“Tony Hawk 39.75”--> 39.75“或长度 x 宽度“Tony Hawk 39.75”x 8.75“”-- > 9.75 英寸 x 8.75 英寸。问题是名称也可以包含数字,例如'AD-37 8.0"'。所以我尝试使用负向前看,'空格'不跟随'x'(?!.+\s[x]),但它带来了奇怪的结果。

Pattern regex = Pattern.compile("(?!.+\\s[x])\\s(\\d+\\.?\\d*\".*)");
String s = "Tony Hawk 39.75\" x 8.75\"";
// or String s = "AD-37 8.0\"";
Matcher m = regex.matcher(s);
if (m.find()) {
    System.out.println(m.groupCount());
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}

当我执行上面的示例时,它返回组 1 '8.75"',我不明白。这里我期望的是 'Tony Hawk'。

有什么提示我做错了什么吗?

java regex regex-lookarounds regex-group
1个回答
1
投票

使用模式:

(.+?)\\s(\\d+\\.\\d*\".*)

可能会产生更好的结果:

2 
Tony Hawk
39.75" x 8.75"

示例:

https://regex101.com/r/pN0fW1/1

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