【问题标题】:Regexp to match string of UPPERCASE words, separated by SINGLE spaces, length of string <= 20正则表达式匹配大写单词字符串,由单个空格分隔,字符串长度 <= 20
【发布时间】:2012-09-05 11:44:55
【问题描述】:

好的,接下来: 目标是制作匹配“BLABLA BLA B BLAB”字符串的正则表达式,例如:

^[A-Z](\s?[A-Z])*$

但主要问题是匹配字符串的长度可以是 1 到无穷大之间的任何值。那么是否有可能制作一个行为与上述完全相同的正则表达式,但仅当字符串长度小于或等于 20 个字符时才匹配? (字符串开头和/或结尾处不允许有空格。)

我了解在这种情况下,最好在正则表达式之外更改字符串长度(例如,在我的应用程序的代码中,已经这样做了),但我只是好奇我是否'我错过了一些简单的东西?

编辑:20 个字符是字符串的全长,包括单词之间的可选单个空格。字长可以是 1 个字符或更多。 因此,“AAAAABBBBBDDDDDEEEEE”(20 个大写字母)应该匹配,“AAAAABBBBB CCCCDDDDD”应该匹配(中间有 1 个空格),“AAAA BBBB CCCC DDDDD”应该匹配(中间有 3 个 单个 空格,字符串长度为 20),“AA B”应该匹配(中间有一个空格,总长度

【问题讨论】:

  • 在询问正则表达式问题以提供示例输入和预期输出时总是很有帮助的。空格算在 20 个字符中吗?
  • 是的,20 个字符是全长,包括单词之间的空格,所以字符串可以只有 20 个字母,或者 19 个字母,除了开头/结尾等地方有一个空格等。抱歉误导。

标签: regex string limit


【解决方案1】:

试试这个

^(?=.{1,20}$)[A-Z](\s?[A-Z])*$

【讨论】:

  • 该死,我知道这与前瞻有关。杰出的!谢谢。
【解决方案2】:

使用这个:

^(?=.{1,20}$)([A-Z]+\s?)+[A-Z]$

【讨论】:

  • 不幸的是,这个表达式允许这样不需要的东西:1) 允许字符串的开头和结尾有空格 2) 允许任何两个单词之间有多个空格 - 任何两个单词之间只允许一个空格。
  • 对不起,如果这听起来很愚蠢(或者如果我误解了),但整个字符串不应该是最多 20 个字符 ([A-Z\s])?
  • 不错!仅供参考(双关语:),看看regular-expressions.info/refadv.html。您还想从 {1,20) 更改为 {1,19},因为最后有一个 [A-Z] 强制。
  • 太棒了,谢谢。看起来我需要更多与前瞻相关的知识。很棒的帖子。
猜你喜欢
  • 1970-01-01
  • 2011-12-13
  • 2021-05-23
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多