You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则表达式:提取特定关键字后的目标数字/字符串

解决提取「local AS number」后内容的正则问题

嘿,你的需求很明确,就是要精准抓取「local AS number」后面的数字/带小数点的字符串对吧?之前用的正则(\d+)\D*$没达到预期,主要有两个问题:一是它只能匹配连续纯数字,没法识别带小数点的格式;二是它从字符串末尾往前找,没和你指定的关键字关联起来,自然抓不到精准内容。

给你两个靠谱的正则方案,按需选择:

方案1:精准匹配关键字后的非空白内容(适配你的示例场景)

如果「local AS number」后面的目标内容直到字符串结束,且没有空格,用这个最直接:

Pattern p = Pattern.compile("local AS number (\\S+)");
  • \S+ 表示匹配一个或多个非空白字符,完美覆盖100和100.100这类格式。

方案2:严格匹配数字+小数点组合(更严谨)

如果想确保只匹配数字和小数点的组合(避免意外捕获其他字符),可以用这个:

Pattern p = Pattern.compile("local AS number ([\\d.]+)");
  • [\d.]+ 表示匹配一个或多个数字或小数点,完全贴合你的预期输出格式。

完整测试代码示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str1 = "Remote system identifier 1.1.1.1, local AS number 100";
        String str2 = "Remote system identifier 1.1.1.1, local AS number 100.100";
        
        // 使用方案2的正则
        Pattern p = Pattern.compile("local AS number ([\\d.]+)");
        
        // 测试第一个字符串
        Matcher m1 = p.matcher(str1);
        if (m1.find()) {
            System.out.println(m1.group(1)); // 输出:100
        }
        
        // 测试第二个字符串
        Matcher m2 = p.matcher(str2);
        if (m2.find()) {
            System.out.println(m2.group(1)); // 输出:100.100
        }
    }
}

这里要注意:用find()方法就能定位到匹配内容,不需要while循环(每个字符串里只有一个目标匹配项);通过group(1)获取括号内捕获的目标内容,而不是group()(后者会返回包含「local AS number」的整个匹配串)。

内容的提问来源于stack exchange,提问作者Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:50