1

以下の「no」、「no」、「0.002」、「0.998」をJavaの正規表現を使用してString配列に入れるにはどうすればよいですか?

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

以下に「theRegex」の書き方を教えてもらえますか?

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

Pythonでは、次の1行になります。

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

しかし、Javaはどうですか?

4

3 に答える 3

2

theRegex="[\\s,*]+"(1つ以上のスペース、コンマ、またはアスタリスク)

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

編集

入力文字列は"12:no 2:no 0.002、* 0.998"であり、期待される出力は["no"、 "no"、 "0.002"、"0.998"]です。

その場合split、無視するために区切り文字として1扱う必要があるため、単独で使用することはできませんが、のデータの一部でもあります。\d\d0.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(?:$|:")digitまたはの形式の文字列に一致します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 に答える