我有这样的输入:
Helio P10 processor ARM® cortex®-A53™1.8GHz
并使用正则表达式:(?i)(Cortex)\\s*-{0,}\\s*(A)?\\s*-{0,}\\s*(\\d{1,2})?
用于输入,例如。 Helio P10 处理器 ARM cortex-A53 1.8GHz
它给出了正确的值 - cortex-A53
但是对于输入,例如。 Helio P10 处理器 ARM® cortex®-A53™1.8GHz
它无法正常工作,并提供 cortex
作为输出。
要求:要提取像 cortex-A54 这样的值,但如果 cortex 和 - 之间有任何特殊字符,则不起作用。
最佳答案
你可以这样做:
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)
:检测您想要的结果的开始 -
(?:.?)
:允许在 cortex 之后有一个特殊字符 -
(?<ref>[a-zA-Z]\d{1,2})
:cortex之后想要的数据格式 -
(?i:...)
: 忽略大小写
输出:
cortex-A53
cortex-A53
Cortex-A72
关于java - 由于特殊字符,正则表达式未给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49855670/