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

正则表达式无法匹配EB后数字间含空格的问题求助

解决正则匹配EB后含空格分隔7位数字的问题

原问题分析

你的正则(.*)(EB([\s]{0,})[0-9]{7})要求EB后(可带0或多个空格)必须跟连续的7位数字,但输入里的数字被空格拆分(比如EB 67645 89),不符合"连续7位"的规则,所以匹配失败。另外注意Java里replaceAll("\s","")存在转义错误,应该写成replaceAll("\\s","")。

两种可行解决方案

方案1:先预处理去所有空格,再用简化正则匹配

这是最直接的方式,先把输入里的所有空格去掉,再匹配EB后的连续7位数字:

// 1. 预处理:去除所有空格
String cleanedInput = value.replaceAll("\\s", "");
// 2. 简化正则,匹配EB后连续7位数字
Pattern pattern = Pattern.compile("EB(\\d{7})");
Matcher matcher = pattern.matcher(cleanedInput);
if (matcher.find()) {
    String targetNumber = matcher.group(1); // 得到6764589
}

方案2:直接用正则匹配含空格的数字段,再提取去空格

如果不想提前预处理,可以用正则匹配EB后任意空格分隔的数字,再对匹配结果去空格:

Pattern pattern = Pattern.compile("EB\\s*(?:\\s*\\d){7}");
Matcher matcher = pattern.matcher(value);
if (matcher.find()) {
    String matchedPart = matcher.group(); // 得到"EB 67645 89"
    String cleaned = matchedPart.replaceAll("\\s", "");
    String targetNumber = cleaned.substring(2); // 截取EB后的7位数字,得到6764589
}

正则EB\\s*(?:\\s*\\d){7}的含义:

  • EB\\s*:匹配EB,后面跟0或多个空格
  • (?:\\s*\\d){7}:非捕获组,匹配7次"0或多个空格+1个数字",刚好覆盖7个数字(不管数字间有没有空格)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:47:29