данные 3 строки, как я могу извлечь 2-ю строку, используя регулярное выражение?java regex, извлечь строку?
line1
line2
line3
Я использовал
pattern = Pattern.compile("line1.*(.*?).*line3");
Но ничего не появляется
данные 3 строки, как я могу извлечь 2-ю строку, используя регулярное выражение?java regex, извлечь строку?
line1
line2
line3
Я использовал
pattern = Pattern.compile("line1.*(.*?).*line3");
Но ничего не появляется
Вы можете использовать флаг 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]
Это кажется extract \ n, любой способ удалить их? – tnaser
@tnaser: Уверен, что это возможно, проверьте мой обновленный ответ. – anubhava
В вашем примере это сработало, в моем примере оно все еще дает мне новые строки. Любые другие способы их удаления? Я попробовал string = string.replaceAll ("\\\\ n", ""); но не работал – tnaser
Это не будет работать, так как ваш первый .*
матчи все до Line3. Ваше неохотное совпадение теряется, равно как и второе .*
. Попробуйте указать разрывы строк (^ и $) после строки1/перед линией3.
Попробуйте pattern = Pattern.compile("line1.*?(.*?).*?line3", Pattern.DOTALL | Pattern.MULTILINE);
Я не думаю, что это сработает - разве неохотная группа в середине не решит 0 символов? –
Вы можете извлечь все между двумя непустых строк:
(?<=.+\n).+(?=\n.+)
попробовать вариант DOTALL при компиляции регулярное выражение. – Mitch