Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用逗号分隔数据_Java_Regex_Split_Comma - Fatal编程技术网

Java 用逗号分隔数据

Java 用逗号分隔数据,java,regex,split,comma,Java,Regex,Split,Comma,我在学RegEx。完全是个新手:P 我想从下面的数据中分离数字,这些数据仅用逗号分隔 test t,b 45,49 31,34,38,34,56,23,,,,3,23,23653,3875,3.7,8.5,2.5,7.8,2., 6 6 6 6 , , . .,/;,jm.m.,,n ,sdsd, 3,2m54,2 4,2m,ar ,SSD A,,B,4D,CE,S4,D,2343ES,SD 假设我从表单文本字段获取上述数据。现在我只想读取数据,数据是用逗号分隔的数字 解决方案应为[字符串]

我在学RegEx。完全是个新手:P

我想从下面的数据中分离数字,这些数据仅用逗号分隔

test
t,b
45,49
31,34,38,34,56,23,,,,3,23,23653,3875,3.7,8.5,2.5,7.8,2., 6 6 6 6 ,
,
.
.,/;,jm.m.,,n ,sdsd, 3,2m54,2 4,2m,ar ,SSD A,,B,4D,CE,S4,D,2343ES,SD
假设我从表单文本字段获取上述数据。现在我只想读取数据,数据是用逗号分隔的数字

解决方案应为[字符串]

45,49,31,34,38,34,56,23,3,23,23653,3875
应跳过所有其他数据。 我试过这样的^[0-9]+\$

但它也从3.7中选择7,从8.5中选择5,等等


谁能帮我解决这个问题

假设您已在逗号处拆分,并尝试检查得到的元素是否为数字,请使用以下表达式:
^\d+(?:\。\d+)$
,这意味着:“必须以数字开头,后面可能跟一个点,并且至少还有一个数字”

这将匹配
31
以及
7.8
,但不匹配
2.
6
2m54

下面是对该表达式的部分解释:

`(?<=,|\n|^)\s*(\d+)\s*(?=,|\n|$)`
  • ^
    表示:匹配必须从第一个字符开始
  • $
    表示:匹配必须在最后一个字符处结束,因此两者一起表示整个字符串必须匹配
  • \d+
    表示:一个或多个数字
  • (?:…)
    是一个非捕获组,允许应用
    量词
  • \。
    表示:文字点
  • (?:\。\d+)
    因此表示:零或一次出现的点后跟至少一个数字
编辑:如果只需要整数,只需删除组:
^\d+$
->整个输入必须是一个或多个数字


编辑2:如果您可以在输入字符串前面加上逗号(请参见编辑4),您应该能够使用此正则表达式获取所有数字:
(?我能想到的最短解决方案是用空字符串替换不是由逗号分隔的数字集的任何内容。因此,您可以执行
s.replaceAll([^0-9]*,“,”,”)
如果有随机换行符,您可能需要添加一个
s.replaceAll(“\n”,“,””)
。然后在这些转换之后,您可以按照建议进行操作,并使用逗号拆分。

此体验将为您提供所需的所有数字(仅数字,无逗号)


“^\d+|”(?您希望这是一个Java问题还是一个JavaScript问题?使用String[]results=secondString.split(“,\\s*”);//在commasI上拆分我希望这是一个Java问题。但是如果数据包含“34ES”,它将得到“34”“从那以后。但它应该被忽略。只有用逗号分隔的数字必须被读取,所有其他组合必须被忽略。我想直接分割数据。首先用”“分割,然后检查每个字符串可能会带来性能开销!在这种情况下,我尝试了其他方法(data.trim().matches([0-9+])”在分割后匹配模式。感谢您的努力和帮助。您能解释一下您是如何编写的吗?我是新手。通过组(1)和?@nitin88
group(1)
由JavaDoc在该方法上记录。它声明组0将是整个匹配(包括空格),因此,如果在表达式中使用捕获组,它们将从1开始?
`(?<=,|\n|^)\s*(\d+)\s*(?=,|\n|$)`
"^\d+|(?<=,)\d+$|(?<=,)\d+(?=,)"
kent$  echo "31,34,38,34,56,23,,,,3,23,23653,3875,3.7,8.5,2.5,7.8,2., 6 6 6 6 ,
"|grep -oP "^\d+|(?<=,)\d+$|(?<=,)\d+(?=,)"

31
34
38
34
56
23
3
23
23653
3875