0

次の行の文字列を一致させるのに問題があります。

02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:153) 
02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.view.Window$LocalWindowManager.addView(Window.java:559)
02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2716)
02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2151)
02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.app.ActivityThread.access$700(ActivityThread.java:140)
02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
02-16 12:23:24.046  3068  3068 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:99)

そして、最後の 2 つの '(' ')' 文字の間で文字列を一致させたいと考えています。正規表現のチュートリアルがたくさんあることは知っていますが、まだ入手できません。これについてもっと勉強する必要がある

したがって、成功の結果は次のようになります。

WindowManagerImpl.java:153
Window.java:559
ActivityThread.java:2716
ActivityThread.java:2151
and so on

私が知っているのは、「Java」という単語が常にあるとは限らないということだけです。そのため、最後の「(」「)」の間に値を取りたいと考えています。

手がかりをありがとうございました

4

4 に答える 4

2

以下を使用できます。

var matches = Regex.Matches(input, @"(?<=\().*(?=\))");
foreach (Match item in matches)
{
    Console.WriteLine(item.Value);
}
于 2013-02-18T10:17:12.723 に答える
2

行に他の括弧がないと仮定すると、次のようなものが機能します。

\([^)]+\)

次に、一致の端から ( および ) を切り取ることができます。

または、内部テキストでグループ化します。

\(([^)]+)\)

そして、 match.Groups[1].Value を使用して内部グループの値を取得します。

更新:そして@cabecaoは、テキストが常に最後に表示され、他の括弧が存在する可能性がある場合は、行末に一致するように最後に「$」を追加することを思い出させました.

\([^)]+\)$
于 2013-02-18T10:16:07.407 に答える
2

これはそれを行う必要があります:

(?<=\()[^)]+(?=\)$)

グループをキャプチャする代わりにルックアラウンドを使用して、結果の抽出を容易にします。これは、string の最後に1 が先行し、その後に 1 が続く非括弧文字のグループと一致します。

于 2013-02-18T10:18:43.753 に答える
1

私が今考えることができる最も簡単な:

.*\((.*)\)$
于 2013-02-18T10:16:14.820 に答える