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
相关产品推荐
相关产品推荐

