java - 使用正则表达式组从字符串中提取值

标签 java regex string

我必须使用正则表达式组从字符串中提取值。

输入是这样的,

-> 1
-> 5.2
-> 1(2)
-> 3(*)
-> 2(3).2
-> 1(*).5

现在我编写以下代码以从这些输入中获取值。

String stringToSearch = "2(3).2";
Pattern p = Pattern.compile("(\\d+)(\\.|\\()(\\d+|\\*)\\)(\\.)(\\d+)");
Matcher m = p.matcher(stringToSearch);

System.out.println("1: "+m.group(1)); // O/P: 2
System.out.println("3: "+m.group(3)); // O/P: 3
System.out.println("3: "+m.group(5)); // O/P: 2

但是,我的问题是只有第一组是必修的,其他组是可选的。

这就是为什么我需要像这样的正则表达式,它将检查所有模式并提取值。

最佳答案

使用非捕获组并通过在这些组旁边添加 ? 量词将它们变为可选。

^(\d+)(?:\((\d+|\*)\))?(?:\.(\d+))?$

DEMO

Java 正则表达式是,

"(?m)^(\\d+)(?:\\((\d\+|\\*)\\))?(?:\\.(\\d+))?$"

例子:

String input = "1\n" + 
        "5.2\n" + 
        "1(2)\n" + 
        "3(*)\n" + 
        "2(3).2\n" + 
        "1(*).5";
Matcher m = Pattern.compile("(?m)^(\\d+)(?:\\((\\d+|\\*)\\))?(?:\\.(\\d+))?$").matcher(input);
while(m.find())
{
    if (m.group(1) != null)
    System.out.println(m.group(1));
    if (m.group(2) != null)
    System.out.println(m.group(2));
    if (m.group(3) != null)
    System.out.println(m.group(3));
}

关于java - 使用正则表达式组从字符串中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28109089/

相关文章:

java - JAX-WS 密码类型 PasswordText

java - 如何防止我的程序因用户输入而崩溃

php - 使用正则表达式时如何处理波兰语字符?

java - 在java中分割包含使用符号的数学函数

c - C 中的不兼容转换错误

java - 来自 kafka 流的 Spark 应用程序需要很长时间才能产生推荐

java - 为什么在使用 DriverManager.getConnection 时我的 SQL 连接会卡住?

.net - 将字符串替换为目标格式

javascript - JavaScript 字符串如何是一组 "elements"16 位无符号整数值?

c++ - C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符总数或任何最佳方法