2015-07-20 2 views
1

Я хочу, чтобы соответствовать только две строки перед совпавшей строкиКак соответствовать две строки перед определенной строки

e.g Rohan pillai J. 

В настоящее время я использую:

pattern= (?=\w+ J[.])\w+ 

Ответ - ПИЛЛАИ

желаемый ответ - Rohan pillai

+1

Я предложу использовать этот шаблон = \ w * \ s \ w * (?) надеюсь, что он сработает. Я проверил сайт live regex ... попробуйте ... – pedram

ответ

1

Альтернативных для получения первых двух наименований:

\w*\s\w*(?=\sJ\.) 

Regex live here.

Разъяснение:

\w*\s   # the first word (name) followed by space 
\w*   # the second word (name) 
(?=\sJ\.)  # must end with space and "J." - without taking it 

Совет: Как правило, чтобы избежать регулярных выражений метасимволы (как точка .) мы используем обратную косую черту. Используйте класс символов, например [.], если вы хотите сделать акцент на этом символе (если вы хотите сделать его более заметным, когда будете читать это регулярное выражение).

+1

@Pshemo. Просто не вводить в заблуждение концепции позже, хотя это не правило. –

+0

Я отредактировал ваш ответ немного, чтобы изменить «Избегайте использования' [.] '", Который может быть интерпретирован как «мы не должны использовать' [.] 'Любой ценой -'.. '' Почти никогда не действует "во что-то большее нейтральный. Надеюсь, вы не против. – Pshemo

+0

@Pshemo. Это выглядит лучше. спасибо –

1

Вы должны поместить взгляд вперед в завершающем:

(\w+) (\w+)(?= J\.) 

Смотрите демо https://regex101.com/r/wH0oU8/1

Или более общие, вы можете использовать \s, чтобы соответствовать любому пробелу вместо пространства:

(\w+)\s(\w+)(?=\sJ\.) 
+0

Я бы не рекомендовал использовать regex101.com для Java - он не поддерживает полный Java-код регулярного выражения. Лучше использовать [regexplanet] (http://www.regexplanet.com/advanced/java/index.html). – RealSkeptic

+1

@RealSkeptic Да, вы правы, но это было простое регулярное выражение. в любом случае спасибо за предложение! – Kasramvd

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