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)

我想在最后两个 '(' ')' 字符之间匹配字符串。我知道有很多正则表达式教程,但我还不能得到它。我需要对此进行更多研究

所以成功的结果应该是:

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

我所知道的是并不总是有“java”这个词,所以我想在最后一个“(”“)”之间取值

谢谢大家的任何线索

4

4 回答 4

2

假设该行中没有其他括号,那么这样的事情会起作用:

\([^)]+\)

然后,您可以从匹配的末端修剪 ( 和 )。

或在内部文本中分组:

\(([^)]+)\)

然后使用 match.Groups[1].Value 获取内部组的值。

更新:@cabecao 提醒我,如果文本总是出现在末尾,并且可能还有其他括号,那么在末尾添加一个“$”以匹配行尾。

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

您可以使用:

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

这应该这样做:

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

使用环视而不是捕获组可以更轻松地提取结果。它将匹配字符串末尾的一组非括号字符,前面有一个,后面有一个。

于 2013-02-18T10:18:43.753 回答
1

我现在能想到的最简单的:

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