由于特殊性质,正则表达式没有给出正确的结果

时间:2018-04-16 11:00:10

标签: java regex regex-group

我输入的内容如下:

Helio P10 processor ARM® cortex®-A53™1.8GHz

并使用正则表达式:(?i)(Cortex)\\s*-{0,}\\s*(A)?\\s*-{0,}\\s*(\\d{1,2})?

输入例如。 Helio P10 processor ARM cortex-A53 1.8GHz 它给出了适当的价值 - cortex-A53

但是对于输入,例如。 Helio P10 processor ARM® cortex®-A53™1.8GHz它无法正常工作,并以cortex作为输出。

要求:要提取像cortex-A54这样的值,但是如果在cortex和 - 之间有任何特殊字符,它就不起作用。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

String s = "Helio P10 processor ARM cortex-A53 1.8GHz"+
        "Helio P10 processor ARM® cortex®-A53™1.8GHz"+
        "Helio P10 processor ARM® Cortex®-A72™1.8GHz";
Pattern p = Pattern.compile("(?i:(?<proc>cortex)(?:.?)-(?<ref>[a-zA-Z]\\d{1,2}))");
Matcher m = p.matcher(s);
while (m.find()){
    System.out.println(m.group("proc")+"-"+m.group("ref"));
}

正则表达式解释:

  • (?<proc>cortex):检测您想要的结果的开头
  • (?:.?):在皮质
  • 之后允许一个特殊字符
  • (?<ref>[a-zA-Z]\d{1,2}):皮质后所需数据的格式
  • (?i:...):忽略大小写

输出:

cortex-A53
cortex-A53
Cortex-A72