2013-02-18 4 views
0

У меня есть проблема, чтобы соответствовать некоторой строке в паровании линии:Regex шаблона для этой строки

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 

Все, что я знаю, что не всегда есть слово «ява», так что я хочу, чтобы принять значение между последним «(» «)»

Спасибо всем за любые подсказки

+0

Почему вам нужно регулярное выражение? Logcat - это TAB с разделителями IIRC. – leppie

+0

Какое отношение это имеет к шаблонам дизайна? –

+2

[Что вы пробовали?] (Http://whathaveyoutried.com) –

ответ

2

Если предположить, нет другого скобка в строке то что-то подобное будет работать:

\([^)]+\) 

Затем вы можете обрезать (и) с концов спички.

Или группа во внутреннем тексте:

\(([^)]+)\) 

И затем использовать match.Groups [1] .Value, чтобы получить значение внутренней группы.

Обновление: и @cabecao напомнил мне, если текст всегда появляется в конце, и может быть другая скобка, а затем добавить «$» в конце, чтобы соответствовать концу строки.

\([^)]+\)$ 
1

Простейшим я могу думать сейчас:

.*\((.*)\)$ 
2

Вы можете использовать:

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

Это следует сделать это:

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

Использование lookarounds вместо capturing groups сделать добычу результат проще. Он будет соответствовать группе символов без круглых скобок, которым предшествует одна, а затем - в end of the string.

+0

Хорошая точка с поисковыми окнами. –

Смежные вопросы