gpt4 book ai didi

java - 用逗号分隔数据

转载 作者:行者123 更新时间:2023-12-01 05:39:16 24 4
gpt4 key购买 nike

我正在学习正则表达式。完全是新手: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 6 6 62m54 .

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

  • ^意思是:匹配必须从第一个字符开始
  • $意味着:匹配必须以最后一个字符结束,因此两者一起意味着整个字符串必须匹配
  • \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 - 用逗号分隔数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com