带组的正则表达式负前瞻

regexp negative lookahead with groups

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

我需要解析字符串末尾的尺寸(英寸),格式可以是 'Tony Hawk 39.75"' --> 39.75" 或长 x 宽 'Tony Hawk 39.75" x 8.75"' --> 9.75" x 8.75"。问题是名称也可以包含数字,例如 'AD-37 8.0"'。所以我尝试使用否定前瞻,即 'space' 不跟在 '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));
}

当我执行上面的示例时,它 returns me for group 1 '8.75"',我不明白。这里我期望 'Tony Hawk'.

任何提示我做错了什么?

使用模式:

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

可能会产生更好的结果:

2 
Tony Hawk
39.75" x 8.75"

示例:

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