Java regex用于使用特定分隔符分隔的一系列数字

时间:2012-11-05 21:53:41

标签: java regex

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

34 #563# 23

123#678#12#44# 45

2 个答案:

答案 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*)效率极低。超过一两串,不是什么大不了的事,但如果你说,从电话簿中提取数字,你将会度过一段美好的时光。