簡體   English   中英

正則表達式允許一兩位數字后跟逗號(也允許空格)

[英]Regex to allow one or two digits followed by commas (spaces are allowed too)

我正在嘗試實現標題中描述的正則表達式...這是我到目前為止的內容:

"(^\\d{1,2})+(,\\d{1,2})*$"

當我的輸入是這樣時,它可以工作:

1,2,3,4,5,6,7 and so goes on

但我想允許用戶根據需要添加空格:

1 ,     2,3,4    ,5

我知道這有點奇怪,但是我想給最終用戶一個靈活性。 我該如何完成呢?

編輯:我忘了提到空格只允許在一位或兩位數之前或之后;
EDIT2:我也忘記提及逗號后,也可以有空格。

我會在正向前瞻中添加可選的空格,例如:

String input = "1, 2 , 3, 45 , 67,89";
//                           | 1 or 2 digits
//                           |       | start positive lookahead
//                           |       |  | optional whitespace
//                           |       |  |   | comma
//                           |       |  |   || or
//                           |       |  |   ||| end of input
Pattern p = Pattern.compile("\\d{1,2}(?=\\s*,|$)");
Matcher m = p.matcher(input);
while (m.find()) {
   System.out.println(m.group());
}

輸出量

1
2 
3
45 
67
89

將您的','替換為[,] +

例如

[0-9]+([ ,]+[0-9]+)*

使用: \\\\d{1,2}(?=\\\\s*,*) 。這將匹配您的字符串

我認為這是一種可行的詳細方法:

"(\\\\d{1,2}\\\\s*,\\\\s*)*"

如你所知

^(\\d{1,2})+(,\\d{1,2})*$ 

效勞於

1,2,3,4,5,6,7

如果您想讓,零個或多個空格所包圍,您可以把它寫成\\\\s*,\\\\s* 所以讓正則表達式匹配類似

1 ,     2,3,4    ,5

您需要做的就是改變

^(\\d{1,2})+(,\\d{1,2})*$ 

^(\\d{1,2})+(\\s*,\\s*\\d{1,2})*$ 
//           ^^^^^^^^^ - part changed

如果您還想在整個輸入之前和之后添加空格,也可以使用\\\\s*將正則表達式括起來,例如

^\\s*(\\d{1,2})+(\\s*,\\s*\\d{1,2})*\\s*$ 

首先,我會改變

"(^\\d{1,2})+(,\\d{1,2})*$"

"^\\d{1,2}(,\\d{1,2})*$"

因為第一個括號組將不會重復,然后會拋出一堆空格:

"^\\s*\\d{1,2}\\s*(,\\s*\\d{1,2}\\s*)*$"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM