假設您已經以逗號分隔並嘗試檢查您獲得的元素是否爲數字,請使用以下表達式:^\d+(?:\.\d+)?$
,這意味着:「必須以數字後面跟一個點和至少一個多位數字開頭」。
這將匹配31
以及7.8
,但不2.
,6 6 6 6
或2m54
。
下面是由該表達的一部分,說明部分:
^
表示:比賽必須在第一個字符
$
意味着開始:比賽必須在最後的字符結束,所以雙方共同表示整個字符串必須匹配
\d+
指:一個或多個數字
(?: ...)
是一個允許應用?
量詞非捕獲組
\.
表示:字面點
(?:\.\d+)?
從而意味着:後面至少一個數字
編輯點的零次或一個出現次數:如果您只想整數,只是刪除該組:^\d+$
- >整個輸入必須是一個或多個數字。
編輯2:
如果你能前插和逗號追加到輸入字符串
(請參閱編輯4),你應該能夠使用正則表達式得到所有的數字:(?<=,)\s*(\d+(?:\.\d+)?)\s*(?=,)
(整數只會要求你刪除(?:\.\d+)?
部分)。
該表達式獲取兩個逗號之間的所有數字,逗號和數字之間可能有空格,並將數字捕獲到一個組中。這應防止6 6 6 6
或2m54
的匹配。然後只需遍歷這些匹配即可獲得所有組。
編輯3:以下是您輸入字符串的示例。
String input = "test\n" +
"t,b\n" +
"45,49\n" +
"31,34,38,34,56,23,,,,3,23,23653,3875,3.7,8.5,2.5,7.8,2., 6 6 6 6 ,\n" +
",\n" +
".\n" +
".,/;,jm.m.,,n ,sdsd, 3,2m54,2 4,2m,ar ,SSD A,,B,4D,CE,S4,D,2343ES,SD\n";
Pattern p = Pattern.compile("(?<=,|\\n)\\s*(\\d+(?:\\.\\d+)?)\\s*(?=,|\\n)");
Matcher m = p.matcher(input);
List<String> numbers = new ArrayList<String>();
while(m.find())
{
numbers.add(m.group(1));
}
System.out.println(Arrays.toString(numbers.toArray()));
//prints: [45, 49, 31, 34, 38, 34, 56, 23, 3, 23, 23653, 3875, 3.7, 8.5, 2.5, 7.8, 3]
//removing the faction group: [45, 49, 31, 34, 38, 34, 56, 23, 3, 23, 23653, 3875, 3]
編輯4:實際上,你並不需要添加逗號,就用這句話:
`(?<=,|\n|^)\s*(\d+)\s*(?=,|\n|$)`
在開始的團體和結束意味着比賽必須按照輸入的開始,逗號或換行符,然後輸入結尾,逗號或換行符。
你打算這是一個** **的Java問題或一個**的JavaScript **問題? – Pointy
使用String [] results = secondString.split(「,\\ s *」); //在逗號分割 –
我希望這是Java問題。 – nitin88