正则表达式无法匹配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
相关产品推荐
相关产品推荐

