此字符串的正则表达式模式

时间:2013-02-18 10:12:11

标签: c# regex

我遇到了一个问题,就是在fallowing行中匹配一些字符串:

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 个答案:

答案 0 :(得分:2)

假设行中没有其他括号,那么这样的东西就可以了:

\([^)]+\)

然后你可以在比赛结束时修剪(和)。

或在内部文本中分组:

\(([^)]+)\)

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

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

\([^)]+\)$

答案 1 :(得分:2)

您可以使用:

var matches = Regex.Matches(input, @"(?<=\().*(?=\))");
foreach (Match item in matches)
{
    Console.WriteLine(item.Value);
}

答案 2 :(得分:2)

这应该这样做:

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

使用lookarounds代替capturing groups可以更轻松地提取结果。它将匹配一组前缀为1的非括号字符,后跟end of the string处的一个字符。

答案 3 :(得分:1)

我现在能想到的最简单:

.*\((.*)\)$