2

我正在尝试为 java 编写一个匹配以下字符串的正则表达式:

number,number,number(可以是这么简单,也可以有可变数量的数字,但每个数字后面必须有一个逗号,但不会有任何空格)

这是我的尝试:

[[0-9],[0-9]]+

但它似乎与其中有数字的任何东西相匹配

4

5 回答 5

3

你可以尝试一些类似的东西([0-9]+,)*[0-9]+

这将匹配:

  • 只有一个数字,例如:7
  • 两个数字,例如:7,52
  • 三个数字,例如:7,52,999
  • 等等

这将不匹配:

  • 带空格的东西,例如:7, 52
  • 以逗号结尾的列表,例如:7, 52,
  • 许多其他事情超出了这个问题的范围。
于 2012-10-29T01:20:05.727 回答
1

我认为这会奏效

\d+,(\d+,)+

请注意,如您所愿,这只会捕获数字后跟逗号

于 2012-10-29T01:19:44.843 回答
1

我猜你是从一个字符串开始的。你为什么不直接使用String.split(",")

于 2012-10-29T01:20:30.420 回答
0

^ 表示字符串的开头,$ 表示结尾。如果你不使用这些,你可以在中间匹配一些东西(b匹配的“abc”)。

它之前的元素上的+作品。 b是一个元素,[0-9]是一个元素,组也是如此(括号中的东西)。

所以,你想要的正则表达式匹配:

  • 字符串的开始^
  • 一个号码[0-9]
  • 任何数量的昏迷按数字流动(,[0-9])+
  • 字符串的结尾$

或者,^[0-9](,[0-9])+$

于 2012-10-29T01:22:49.623 回答
0

尝试将正则表达式作为[\d,]*字符串表示,[\\d,]*如下所示:

   Pattern p4 = Pattern.compile("[\\d,]*");
   Matcher m4 = p4.matcher("12,1212,1212ad,v");
   System.out.println(m4.find()); //prints true
   System.out.println(m4.group());//prints 12,1212,1212

如果您想匹配至少一个逗号 (,) 和两个数字,例如12,1212,那么您可能希望使用正则表达式 as(\d+,)+\d+和字符串表示 as \\d+,)+\\d+。此正则表达式匹配一个区域,其数字最少为一位数字,后跟一个逗号 (,),后跟最少一位数字。

于 2012-10-29T01:44:35.710 回答