-1

私は文を持っています:"we:PR show:V"。正規表現パターンマッチャーを使用":"する前後の文字のみを一致させたい。"\\s"私は次のパターンを使用しました:

Pattern pattern=Pattern.compile("^(?!.*[\\w\\d\\:]).*$");

しかし、それは機能しませんでした。出力を取得するための最良のパターンは何ですか?

4

2 に答える 2

2

このような状況では、Javaを使用している場合、サブストリングを使用して何かを行う方が簡単な場合があります。

String input = "we:PR show:V";
String colon = ":";
String space = " ";
List<String> results = new ArrayList<String>();
int spaceLocation = -1;
int colonLocation = input.indexOf(colon);
while (colonLocation != -1) {
    spaceLocation = input.indexOf(space);
    spaceLocation = (spaceLocation == -1 ? input.size() : spaceLocation);
    results.add(input.substring(colonLocation+1,spaceLocation);

    if(spaceLocation != input.size()) {
        input = input.substring(spaceLocation+1, input.size());
    } else {
        input = new String(); //reached the end of the string
    }
}
return results;

これは、正規表現で一致させようとするよりも高速になります。

于 2012-12-03T06:13:00.920 に答える
1

次の正規表現は、コロンに続く(コロン以外の文字が前にある)空白以外の文字が有効な一致であることを前提としています。

[^:]+:(\S+)(?:\s+|$)

次のように使用します:

String input = "we:PR show:V";
Pattern pattern = Pattern.compile("[^:]+:(\\S+)(?:\\s+|$)");
Matcher matcher = pattern.matcher(input);
int start = 0;
while (matcher.find(start)) {
    String match = matcher.group(1); // = "PR" then "V"
    // Do stuff with match
    start = matcher.end( );
}

パターンは次の順序で一致します。

  1. コロンではない少なくとも1つの文字。
  2. コロン。
  3. 少なくとも空白以外の文字(私たちの一致)。
  4. 少なくとも1つの空白文字、または入力の終わり。

正規表現が文字列内の項目と一致する限り、ループは続行されます。インデックスstartは、現在の一致の終了後を指すように常に調整されます。

于 2012-12-03T06:02:24.143 に答える