我需要一个正则表达式来描述一个字符串,该字符串包含至少三 (3) 个和最多六 (6) 个 2 位数字和任意顺序的 3 位数字。数字应该用空格分隔,#
但也可以包含空格。此字符串的示例是:
34 #563# 23
123#678#12#44# 45
这个怎么样:
^s*\d{2,3}\s*(?:#\s*\d{2,3}\s*){2,5}$
解释:
^ # Start of string
\s* # optional whitespace
\d{2,3} # match a number (2 to 3 digits)
\s* # optional whitespace
(?: # Match...
\# # - a hashmark
\s* # - optional whitespace
\d{2,3} # - a number
\s* # - optional whitespace
){2,5} # 2 to 5 times
$ # End of string
/\d{2,3}(?:\s*#\s*\d{2,3}){2,5}/
解释:
\d
捕获一个数字。
{2,3}
两三遍,然后:
(?:……)
将以下内容分组,但不要捕获组本身捕获的内容。
\s*
捕获零个或多个空格...
#
...一个英镑的符号。
\s*
...零个或多个空格...
\d{2,3}
和另一个两位或三位数字。
{2,5}
该组做两到五次,总共三到六个数字。
要强制它匹配一个完整的字符串,您可以添加^\s*
到开头和\s*$
结尾,因为^
匹配字符串的开头和$
结尾,但我实际上建议只使用克拉和美元符号并改用trim
函数, 因为\s*
(或真的,and *
)效率极低。超过一两个字符串,没什么大不了的,但如果你说:从电话簿中提取号码,你会很糟糕。