我试图实现的正则表达式应该与匹配以下数据:
123456
12345
:23456
5
1
成品率2
产品2345
它的不应该与匹配如下:
12 456
1234 6
1 6
1 6
总共应该有6个字符,包括数字、前导和尾随空格。它也可以是6个字符的公正空间。如果使用数字,它们之间就不应该有空格。
我试过以下几种说法,但都没有用:
^\s*[0-9]{6}$
\s*[0-9]\s*
发布于 2016-04-06 07:03:54
您只需使用带有限制性*\d* *
展望的(?=.{6}$)
模式:
^(?=.{6}$) *\d* *$
解释:
^
-字符串的开始(?=.{6}$)
-字符串应该只有6个字符,而不是换行符。*
- 0+正则空间(注意以匹配水平空间-使用[^\S\r\n]
)\d*
- 0+数字*
- 0+正则空间$
-字符串的末端。Java demo (最后4个是应该失败的测试用例):
List<String> strs = Arrays.asList("123456", "12345 ", " 23456", " 5", // good
"1 ", " ", " 2 ", " 2345 ", // good
"12 456", "1234 6", " 1 6", "1 6"); // bad
for (String str : strs)
System.out.println(str.matches("(?=.{6}$) *\\d* *"));
注意,在String#matches()
中使用时,不需要初始^
和最终$
锚点,因为该方法通过默认锚定模式需要一个完整的字符串匹配。
发布于 2016-04-06 08:20:45
你也可以:
^(?!.*?\d +\d)[ \d]{6}$
(?!.*?\d +\d)
确保不选择在数字之间有空格的行。[ \d]{6}
匹配有6个字符的所需行,这些字符只有空格和/或数字。https://stackoverflow.com/questions/36443617
复制相似问题