1

如何在Java中使用正则表达式将下面的“no”、“no”、“0.002”、“0.998”放入字符串数组中?

 String lines = "     1       2:no       2:no       0.002,*0.998"

有人可以告诉我如何在下面写“theRegex”吗?

String[] matches = lines.split(theRegex); // => ["no", "no", "0.002", "0.998"]

在 Python 中,它将只有一行:

matches = line =~ /\d:(\w+).*\d:(\w+).*\((\w+)\)/

但是Java呢?

4

3 回答 3

2

theRegex="[\\s,*]+"(一个或多个空格、逗号或星号)

输入 1 2:no 2:no 0.002,*0.998 输出["1","2:no","2:no","0.002","0.9"]

编辑

输入字符串为“ 1 2:no 2:no 0.002,*0.998”,预期输出为["no", "no", "0.002", "0.998"]

在这种情况下,不能split单独使用,因为要忽略,1您需要将\d其视为分隔符,但\d也是0.002.

你可以做的是:

   Pattern pattern = Pattern.compile("^\\d(?:$|:)");
   String[] matches = lines.trim().split("[\\s,*]+");
   List<String> output = new LinkedList<String>(Arrays.asList(matches));
   for (Iterator<String> it=output.iterator(); it.hasNext();) {
     if (Pattern.matcher(it.next()).find()) it.remove();
   }

find("^\\d(?:$|:")匹配形式为digitor的字符串digit:whatever。请注意,模式编译一次,然后将其应用于列表中的字符串。对于每个字符串,必须构造一个匹配器。

于 2013-03-19T14:39:20.420 回答
1

试试这个正则表达式...

(^\d|[\d]:|[\\s, *]+)+
于 2013-03-19T14:54:20.787 回答
0
String s = "1       2:no       2:no       0.002,*0.998";
String[] arr = s.split(" +");
于 2013-03-19T14:42:01.463 回答