2016-06-07 3 views
0

У меня есть некоторый текст, как этотКак соответствовать п число строк с регулярным выражением

Notes: 
He jumped the sea-horse 
but it looked ropey 
Then he left 

но иногда его как этот

Notes: 




Clay is only green 
When it is seen 

мне нужно захватить 4 строки текста после «Примечания» только поэтому выход должен быть

Notes: 
He jumped the sea-horse 
but it looked ropey 
Then he left 

и для второго примера

Notes: 

Я попытался сопоставлением новой строки, но он соответствует только после того, как остальной части регулярного выражения

Notes:.*\n{4} 

Как я могу создать регулярное выражение, которое позволяет мне повторить матч для всей линии и перевода строки в четыре раза ? (это не захватывающая группа?)

+2

Почему regex ?? У Java есть другие опции – Amit

+1

Вместо того, чтобы читать весь файл в строке и сопоставлять строки новой строки, просто прочитайте одну строку за раз. Когда вы видите «Примечания:», просто прочитайте соответствующее количество дополнительных строк. – azurefrog

+0

Я думаю, вопрос в том, почему не регулярное выражение? –

ответ

1

Вы были близки - в Notes:.*\n{4}{4} привязывается только к новой строке, поэтому он будет захватывать только «Примечания:», за которым следует все, а затем 4 пустые строки.

Вы ищете что-то вроде Notes:\n((?:.*\n){1,4})

+1

Так что я хочу использовать группу захвата, чтобы получить. * \ N - скобки, действующие как группа захвата, чтобы дать мне все четыре строки? –

+0

Ах, вы правы, поведение захвата было не тем, что вы искали. Обновленный ответ, чтобы иметь внешнюю группу захвата и до 4 внутренних не захватывающих групп. –

+0

Отлично. большое спасибо –

2

Если я правильно понял вопрос правильно, и вы хотите, чтобы захватить первые 4 строки, не заботясь о том, что они пустые или нет, может быть, лучше не использовать регулярные выражения и просто разделите текст на новой строке, чтобы получить массив строк. Что-то вроде этого:

string[] lines = text.split("\\r") 

Затем просто вишня выбирает первые четыре элемента массива.

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