[英]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.