如何编写Java正则匹配二维尺寸、排除更高维度并捕获两组数值
符合需求的正则表达式
直接校验用的正则为:^.*?([\d.,]+)\s*[xX]\s*([\d.,]+)(?!.*[xX]).*$
在Java代码中使用时需要对反斜杠转义,写法为:"^.*?([\\d.,]+)\\s*[xX]\\s*([\\d.,]+)(?!.*[xX]).*$"
规则说明
- 两个捕获组
([\d.,]+)分别提取前后两个维度的数值,支持带小数点、千分位逗号的数字格式 \s*[xX]\s*匹配大小写的x,允许x前后存在任意空白字符- 核心限制通过否定前瞻
(?!.*[xX])实现:匹配到第二个数值后,校验后续内容不存在任何x/X,直接排除三维及以上的多维度尺寸 - 前后的
.*?和.*兼容尺寸前后存在其他描述文本的场景
Java代码使用示例
import java.util.regex.Matcher; import java.util.regex.Pattern; public class DimensionMatcher { public static void main(String[] args) { Pattern pattern = Pattern.compile("^.*?([\\d.,]+)\\s*[xX]\\s*([\\d.,]+)(?!.*[xX]).*$"); // 测试用例 String[] testArr = { "S (26 in x 30 in)", "20 x 40", "Standard Size (10 x 40)", "20 x 40 x 80", "M (26 in x 30 in x 50 in)" }; for (String content : testArr) { Matcher matcher = pattern.matcher(content); if (matcher.matches()) { System.out.println("内容:" + content + " 匹配成功"); System.out.println("第一维度值:" + matcher.group(1)); System.out.println("第二维度值:" + matcher.group(2)); } else { System.out.println("内容:" + content + " 不匹配"); } System.out.println("===================="); } } }
内容的提问来源于stack exchange,提问作者Jesus
相关产品推荐
相关产品推荐

