首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex,它将匹配6个只允许数字、前导和尾随空格的字符。

Regex,它将匹配6个只允许数字、前导和尾随空格的字符。
EN

Stack Overflow用户
提问于 2016-04-06 06:54:24
回答 2查看 5.3K关注 0票数 30

我试图实现的正则表达式应该与匹配以下数据:

  1. 123456
  2. 12345
  3. 近端23456
  4.  /T1393-1988工业用5
  5. 1成品率
  6.  /T1397-1993工业用2产品
  7. 粉末冶金2345

它的不应该与匹配如下:

  1. 12 456
  2. 1234 6
  3. 近端1 6
  4. 1 6

总共应该有6个字符,包括数字、前导和尾随空格。它也可以是6个字符的公正空间。如果使用数字,它们之间就不应该有空格。

我试过以下几种说法,但都没有用:

代码语言:javascript
运行
复制
^\s*[0-9]{6}$
代码语言:javascript
运行
复制
\s*[0-9]\s*
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-06 07:03:54

您只需使用带有限制性*\d* *展望的(?=.{6}$)模式:

代码语言:javascript
运行
复制
^(?=.{6}$) *\d* *$

regex demo

解释:

  • ^ -字符串的开始
  • (?=.{6}$) -字符串应该只有6个字符,而不是换行符。
  • * - 0+正则空间(注意以匹配水平空间-使用[^\S\r\n])
  • \d* - 0+数字
  • * - 0+正则空间
  • $ -字符串的末端。

Java demo (最后4个是应该失败的测试用例):

代码语言:javascript
运行
复制
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()中使用时,不需要初始^和最终$锚点,因为该方法通过默认锚定模式需要一个完整的字符串匹配。

票数 42
EN

Stack Overflow用户

发布于 2016-04-06 08:20:45

你也可以:

代码语言:javascript
运行
复制
^(?!.*?\d +\d)[ \d]{6}$
  • 零宽度负前瞻(?!.*?\d +\d)确保不选择在数字之间有空格的行。
  • [ \d]{6}匹配有6个字符的所需行,这些字符只有空格和/或数字。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36443617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档