我需要一个正则表达式来描述一个字符串,该字符串包含最少三(3)个和最多六(6)个2位数字和任意顺序的3位数字。数字应以#
分隔,但也可以包含空格。此字符串的示例是:
34 #563# 23
123#678#12#44# 45
答案 0 :(得分:4)
这个怎么样:
^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
答案 1 :(得分:2)
/\d{2,3}(?:\s*#\s*\d{2,3}){2,5}/
说明:
\d
捕获一个数字。
{2,3}
两三次,然后:
(?:...)
将以下内容分组,但不捕获该组本身捕获的内容。
\s*
捕获零个或多个空格......
#
......一个标志。
\s*
......零个或多个空格......
\d{2,3}
和另外两位或三位数字。
{2,5}
将该组分组两到五次,总共三到六个数字。
要强制它匹配完整的字符串,您可以将^\s*
添加到开头,\s*$
添加到结尾,因为^
匹配字符串的开头,{{1最后,但我实际上建议仅使用克拉和美元符号并使用$
函数,因为trim
(或者真的,\s*
)效率极低。超过一两串,不是什么大不了的事,但如果你说,从电话簿中提取数字,你将会度过一段美好的时光。