2013-07-04 3 views
0

Нужно помочь с регулярным выражением, которое будет использоваться для извлечения строки между start_pattern и end_pattern. Кроме того, регулярное выражение должно grep всех символов до конца строки, если end_pattern не существует.Регулярное выражение для извлечения строки между узорами

Sample 1 : "BOOK1:book1A,book1B,book1C,book1D" 

Ожидаемые результаты: book1A, book1B, book1C, book1D

Sample 2 : "BOOK1:book1A,book1B,book1C,book1D|BOOK2:book2A,book2B,book2C,book2DA" 

Ожидаемые результаты: (1) book1A, book1B, book1C, book1D (2) book2A, book2B, book2C, book2DA

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

(?<=BOOK1:).*(?=\|) 
+0

Вы можете добавить знак вопроса в конце: '(? <= BOOK1:). *? (? = \ |)?', Также вы должны использовать t он не жадный '. *?' вместо жадного '. *', если вы не хотите, чтобы «Sample 2» соответствовал «book1A, book1B, book1C, book1D | BOOK2: book2A, book2B, book2C, book2DA' – Nolonar

ответ

2

Использование $ и изменить .* к .*?

(?<=BOOK1:|\|).*?(?=\||$) 

$ отмечает конец строки или строки

.*? будет соответствовать лениво


Например, для ввода

a|b|c|d|e 

с регулярным выражением

(?<=\|).*(?=\|) 

он соответствовал бы b|c|d

с регулярным выражением

(?<=\|).*?(?=\|) 

это будет соответствовать

b 
c 
d 
+0

О, я вижу , Виноват. – Nolonar

+0

Это работает! Спасибо Anirudh – Codex

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