1

ここでは、BNC からの IRC ログを次の形式で取得しています ([AA:BB:CC] は実際の時間ではなく、読み込み時間のみです)。

[AA:BB:CC] <Person1> [re:al:ts] BLAH BLAH BLAH
[AA:BB:CC] <Person2> [an:ot:he] BLAH BLAH BLAH
[AA:BB:CC] <Person3> [rr:ea:lt] BLAH BLAH BLAH
[AA:BB:CC] <Person4> [im:es:tp] BLAH BLAH BLAH

私はそれを次のように変換したいと思います:

[re:al:ts] <Person1> BLAH BLAH BLAH
[an:ot:he] <Person2> BLAH BLAH BLAH
[rr:ea:lt] <Person3> BLAH BLAH BLAH
[im:es:tp] <Person4> BLAH BLAH BLAH

これは技術的に可能ですか?[AA:BB:CC] は簡単に削除できることがわかりましたが、実際のタイムスタンプを保持して、「何とか何とか」または「」を削除せずに行の /beginning/ に移動するにはどうすればよいでしょうか? 正直なところ、私は正規表現に精通していません...

ありがとう:)メープル

4

3 に答える 3

0

最初にいくつかの仮定を立てましょう。

  1. [hh:mm:ss] 形式のタイムスタンプ、10 未満の秒/分は 01 などで表されます。
  2. person 文字列に「[」が含まれていません

次に、次の正規表現が機能します。

^\[\d{2}:\d{2}:\d{2}\]([^\[]++)(\[\d{2}:\d{2}:\d{2}\])(.*)$

Java で記述されたテスト ケースを次に示します。

public static void main(String[] args) {
    final String[] strings = {"[AA:BB:CC] <Person1> [re:al:ts] BLAH BLAH BLAH",
        "[12:12:11] <Person2> [14:10:25] BLAH BLAH BLAH",
        "[12:12:11] <Person3> [14:10:25] BLAH BLAH BLAH",
        "[12:12:11] <Person4> [14:10:25] BLAH BLAH BLAH"};
    final Pattern pattern = Pattern.compile("^\\[\\d{2}:\\d{2}:\\d{2}\\]([^\\[]++)(\\[\\d{2}:\\d{2}:\\d{2}\\])(.*)$");
    for(final String string : strings) {
        final Matcher matcher = pattern.matcher(string);
        if(matcher.matches()) {
            System.out.println(matcher.group(2) + matcher.group(1) + matcher.group(3));
        }
    }
}

出力:

[14:10:25] <Person2>  BLAH BLAH BLAH
[14:10:25] <Person3>  BLAH BLAH BLAH
[14:10:25] <Person4>  BLAH BLAH BLAH
于 2013-04-10T22:13:55.343 に答える
0

複数行の一致を使用しない場合は、次の正規表現を試してください。

/\[.*?]( <.*?> )\[(.*?)]/g

そして、あなたは次のように置き換えます:

"[$2]$1"
于 2013-04-10T22:04:45.667 に答える