在 Java 中使用正则表达式提取值

2022-08-31 06:18:00

我有几个粗略形式的字符串:

[some text] [some number] [some more text]

我想使用Java Regex类提取[一些数字]中的文本。

我大致知道我想使用什么正则表达式(尽管欢迎所有建议)。我真正感兴趣的是Java调用,以获取正则表达式字符串并将其用于源数据以生成[某个数字]的值。

编辑:我应该补充一点,我只对一个[一些数字]感兴趣(基本上是第一个实例)。源字符串很短,我不会查找[某个数字]的多次出现。


答案 1

完整示例:

private static final Pattern p = Pattern.compile("^([a-zA-Z]+)([0-9]+)(.*)");
public static void main(String[] args) {
    // create matcher for pattern p and given string
    Matcher m = p.matcher("Testing123Testing");

    // if an occurrence if a pattern was found in a given string...
    if (m.find()) {
        // ...then you can use group() methods.
        System.out.println(m.group(0)); // whole matched expression
        System.out.println(m.group(1)); // first expression from round brackets (Testing)
        System.out.println(m.group(2)); // second one (123)
        System.out.println(m.group(3)); // third one (Testing)
    }
}

由于您要查找第一个数字,因此可以使用这样的正则表达式:

^\D+(\d+).*

并将返回第一个号码。请注意,有符号数字可以包含减号:m.group(1)

^\D+(-?\d+).*

答案 2
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex1 {
    public static void main(String[]args) {
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher("hello1234goodboy789very2345");
        while(m.find()) {
            System.out.println(m.group());
        }
    }
}

输出:

1234
789
2345