构建一个允许以下内容的正则表达式语句:
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}$
我几个小时一直在放屁,想不到处理这个问题的最佳方法。
答案 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}$
干杯