首页 > 解决方案 > 如何为具有定义长度的十进制正则表达式(包括逗号)

问题描述

我正在寻找带小数点的 15 个字符长度的正则表达式。在 swift 文档中,正则表达式如下所示: 3!a15d 其中 3!a 表示 [a-zA-Z]{3} 和 15d 表示 15 个字符长度的小数点和逗号。

我尝试了下面的正则表达式:

([A-Z]{3}[0-9]{1,14}[,][0-9]{1})|([A-Z]{3}[0-9]{1,13}[,][0-9]{1,2})|([0-9]{1,12}[,][0-9]{1,3})|([0-9]{1,11}[,][0-9]{1,4})|([0-9]{1,10}[,][0-9]{1,5})|([0-9]{1,9}[,][0-9]{1,6})|([0-9]{1,8}[,][0-9]{1,7})|([0-9]{1,7}[,][0-9]{1,8})|([0-9]{1,6}[,][0-9]{1,9})|([0-9]{1,5}[,][0-9]{1,10})|([0-9]{1,4}[,][0-9]{1,11})|([0-9]{1,3}[,][0-9]{1,12})|([0-9]{1,2}[,][0-9]{1,13})|[0-9]{1}[,][0-9]{1,14}

但它没有用。你有什么建议可以帮助我吗?

标签: javaregex

解决方案


您可以使用

^[a-zA-Z]{3}(?=[^,]*,[^,]*$)\d(?:,?\d){14}$

请参阅正则表达式演示

详情

  • ^- 字符串的开始
  • [a-zA-Z]{3}- 三个 ASCII 字母
  • (?=[^,]*,[^,]*$)- 字符串中只能出现一个强制逗号
  • \d- 一个数字
  • (?:,?\d){14}- 可选逗号和数字的十四次重复
  • $- 字符串结束。

Java 中用于验证字符串的示例用法:

Boolean isValid = text.matches("[a-zA-Z]{3}(?=[^,]*,[^,]*$)\\d(?:,?\\d){14}");

推荐阅读