我遇到了一个问题,就是在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”,所以我想在最后一个“(”“)”之间取值
谢谢大家的任何线索
答案 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)
我现在能想到的最简单:
.*\((.*)\)$