Java正则提取字符串中的第N个子串

Java正则提取子串






正则表达式是一种强大的文本匹配工具,在Java中,使用正则表达式可以方便地实现对字符串的匹配和子串提取。基本步骤如下:

  • 创建正则表达式模式:正则表达式模式是匹配文本的模板
  • 编译正则表达式模式:将正则表达式模式编译成一个可执行的正则表达式对象
  • 匹配文本:使用编译后的正则表达式对象对目标文本进行匹配
  • 提取子串:根据匹配结果获取所需子串

以下是一个示例:

1) 创建正则表达式模式

String regex = "[0-9]+";

2) 编译正则表达式模式

Pattern pattern = Pattern.compile(regex);

3) 匹配文本

String text = "abc10de";
Matcher matcher = pattern.matcher(text);

4) 提取子串

if (matcher.find()) {
    System.out.println(matcher.group());
}

上述代码首先检查匹配器是否找到匹配的字符串,然后使用group()方法获取匹配到的子字符串

值得注意的是,group()方法底层调用了group(0),即默认获取匹配到的第一个,如果想要获取第N个子串,可以使用如下方式:

// 正则提取字符串中的子串,可指定提取第n个
public static String getRegexStr(String str, String regex, Integer n){
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    List<String> list = new ArrayList<>();
    // 除了以下写法,其它写法都不对
    while (matcher.find()){
        list.add(matcher.group());
    }
    System.out.println(list);
    return list.get(n);
}

以下是一些使用示例:

// 正则提取示例1
String text = "abc10de178fg6";
System.out.println(getRegexStr(text, "[0-9]+", 0));
System.out.println(getRegexStr(text, "[0-9]+", 1));
// 正则提取示例2
String text1 = "abc(10)de(8,5)";
System.out.println(getRegexStr(text1, "\\([0-9,]*\\)", 0));
System.out.println(getRegexStr(text1, "\\([0-9,]*\\)", 1));
// 正则提取示例3
String text2 = "Today is 2024-11-16, tomorrow is 2024-11-17.";
System.out.println(getRegexStr(text2, "(\\d{4})-(\\d{2})-(\\d{2})", 0));
System.out.println(getRegexStr(text2, "(\\d{4})-(\\d{2})-(\\d{2})", 1));

另外,值得注意的是,除了上述写法外,其它写法都不对。例如:

// 错误写法1
System.out.println(matcher.group(n));
// 错误写法2
if (matcher.find()) {
    System.out.println(matcher.group(n));
}
// 错误写法3
if (matcher.find(n)) {
    System.out.println(matcher.group(n));
}

如果使用上述写法,程序将抛出IndexOutOfBoundsException异常:

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值