java - 由于特殊字符,正则表达式未给出正确的结果

标签 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 处理器 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/

相关文章:

regex - 为什么 sed 不打印可选组?

java - 消息重新传递 ibm mq

java - 处理 100 万个文件大小在 kbs 到 100 GB 之间的文本文件

javascript - 正则表达式不允许输入字段中有空格

javascript - 匹配后的正则表达式

c# - 无法识别捕获组的 RegEx

java - Spring Boot 应用程序和 MessageSource

java.lang.NoSuchMethodException : [Ljava. lang.reflect.Method;.myMethod(java.lang.String, boolean 值)

java - 查找字符串是否包含除句号之外的非数字?

java - 相等字符串中的正则表达式第 n 个匹配项