2012-01-24 3 views
0

данные 3 строки, как я могу извлечь 2-ю строку, используя регулярное выражение?java regex, извлечь строку?

line1 
line2 
line3 

Я использовал

pattern = Pattern.compile("line1.*(.*?).*line3"); 

Но ничего не появляется

+2

попробовать вариант DOTALL при компиляции регулярное выражение. – Mitch

ответ

1

Вы можете использовать флаг Pattern.DOTALL так:

String str = "line1\nline2\nline3"; 
Pattern pt = Pattern.compile("line1\n(.+?)\nline3", Pattern.DOTALL); 
Matcher m = pt.matcher(str); 
while (m.find()) 
    System.out.printf("Matched - [%s]%n", m.group(1)); // outputs [line2] 
+0

Это кажется extract \ n, любой способ удалить их? – tnaser

+0

@tnaser: Уверен, что это возможно, проверьте мой обновленный ответ. – anubhava

+0

В вашем примере это сработало, в моем примере оно все еще дает мне новые строки. Любые другие способы их удаления? Я попробовал string = string.replaceAll ("\\\\ n", ""); но не работал – tnaser

0

Это не будет работать, так как ваш первый .* матчи все до Line3. Ваше неохотное совпадение теряется, равно как и второе .*. Попробуйте указать разрывы строк (^ и $) после строки1/перед линией3.

0

Попробуйте pattern = Pattern.compile("line1.*?(.*?).*?line3", Pattern.DOTALL | Pattern.MULTILINE);

+0

Я не думаю, что это сработает - разве неохотная группа в середине не решит 0 символов? –

0

Вы можете извлечь все между двумя непустых строк:

(?<=.+\n).+(?=\n.+) 
Смежные вопросы