regexp负向前瞻与群组

时间:2015-07-25 22:58:30

标签: java regex matcher lookahead regex-group

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

我需要解析字符串末尾的大小(英寸),这可以是Tony Hawk 39.75"' - > 39.75"或长度为x宽度的托尼霍克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'

任何提示我做错了什么?

1 个答案:

答案 0 :(得分:1)

使用模式:

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

可能会产生更好的结果:

2 
Tony Hawk
39.75" x 8.75"

示例:

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