正则表达式,允许5-10个字符,但可以在不计数之间的空格

时间:2017-01-25 21:31:21

标签: regex

问题

构建一个允许以下内容的正则表达式语句:

  1. 最少5个字符
  2. 最多10个字符
  3. 可以包含空格,但空格不会增加字符数
  4. 任何非空格字符增加字符数
  5. 测试案例:

     expected_to_pass = ['testa', ' test a', 12342, 1.234, 'test a']
     expected_to_fail = [' test', 'test ', ' test ', '     ', 1234, 0.1, '           ','12345678901']
    

    示例正则表达式语句及其用途

    允许5-10个非空白字符:

    [\S]{5,10}$
    

    无论空格如何,都允许5-10个字符:

    [\s\S]{5,10}$
    

    我几个小时一直在放屁,想不到处理这个问题的最佳方法。

3 个答案:

答案 0 :(得分:3)

这是怎么回事?

\s*(?:[\w\.]\s*){5,10}+$

或者:

\s*(?:[\w\.]\s*){5,10}$

此外,如果有任何非空白字符:

\s*(?:\S\s*){5,10}$

您可以对其进行测试here

答案 1 :(得分:1)

您的问题中存在错误的假设:\w与所有非空格字符不匹配,它与单词字符匹配 - 这意味着字母,数字和下划线。根据设置的语言和标志,这可能包括或排除unicode字母和数字。还有更多非空格字符,例如.|。要匹配空格字符,通常使用\s,因此\S匹配非空格字符。

您可以使用^ \ s *(?:\ S \ s *){5,10} $来检查您的要求。如果您使用某种完全匹配功能(例如Java .matches()或Python re.fullmatch),您可以删除锚点。

根据您使用的语言,您可能不想使用正则表达式,但迭代字符串并检查字符是否为字符。这应该通常比正则表达式更快。

伪代码:

number of chars = 0
for first character of string to last character of string
  if character is space
     inc number of chars by 1
return true if number of chars between 5 and 10

答案 2 :(得分:0)

检查一下: (\s*?\w\s*?){5,10}$

它不匹配1.234因为。不包含在\ w set

如果您需要将其包括在内: <击> (\s*?[\w|\.]\s*?){5,10}$ (\s*?[\w\.]\s*?){5,10}$

干杯