假设您已经以逗号分隔并尝试检查您获得的元素是否为数字,请使用以下表达式:^\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