-1

我需要一个正则表达式来描述一个字符串,该字符串包含至少三 (3) 个和最多六 (6) 个 2 位数字和任意顺序的 3 位数字。数字应该用空格分隔,#但也可以包含空格。此字符串的示例是:

34 #563# 23

123#678#12#44# 45
4

2 回答 2

5

这个怎么样:

^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
于 2012-11-05T21:57:30.013 回答
2
/\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 *)效率极低。超过一两个字符串,没什么大不了的,但如果你说:从电话簿中提取号码,你会很糟糕。

于 2012-11-05T22:00:18.440 回答