Регулярное выражение для сопоставления ближайшего символа в обратном направлении - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть эта строка:

P.1           P.2                    P.3                   P.4  
          ASTON VETERINARY HOSPITAL                                       
            Page 1/2   
        00 PennelJ Road  
      Media, PA 19063-5983 
          (610) 474-5670           
Client :      

Я хочу получить текст между Client и P.\d.Вот демо: Regex

(P.\d)[\s\S]*(?=^.+Client :?)

Проблема в том, что он совпадает с первой страницы P.1.Мне нужен ближайший P.\d до Клиента.

Как изменить регулярное выражение так, чтобы оно совпадало с P.4.

1 Ответ

0 голосов
/ 19 сентября 2018

Я пробовал это с не жадными операторами, но это не сработает.Я бы попытался отойти от того, чтобы регулярное выражение whole соответствовало именно тому, что вы хотите, и вместо этого использовал бы группы.Затем вы можете просто написать средство сопоставления, соответствующее любому числу этих P.1 конструкций, и это значительно упростит ваш поиск строки Client в конце, потому что вам не нужно пытаться сделать это в качестве заглядывания.Таким образом:

String x = "P.1  P.2    P.3   P.4 foobar  Client :";
Pattern p = Pattern.compile("((P\\.\\d)(.*(P\\.\\d))*)+(?<result>.*)Client");
Matcher m = p.matcher(x);
System.out.println(m.find());
System.out.println(m.group("result"));

Кажется, производит именно то, что вы хотите.Синтаксис (?<whatever>REGEX HERE) является регулярным выражением для: Позвольте мне взять этот бит чуть позже, попросив группу «что угодно».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...