Соответствие регулярному выражению до конца текста в Java - PullRequest
0 голосов
/ 05 марта 2019

Я хочу получить все адреса электронной почты поля From с помощью регулярных выражений, например получить все строки текста, которые начинаются с «From:» и заканчиваются новой строкой «/ n».

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

Sent: Tue Mar 05 15:42:11 IST 2019
From: xtest@xyz.co.in
To: akm@xyz.com
Subject: Re: Foausrnisfseur invadlide (030000000000:3143)
Message: 


----------------------------

Sent: Tue Mar 05 15:40:51 IST 2019
From: ytest@xyz.com
To: bpcla@xpanxion.com
Subject: Foausrnisfseur invadlide (O4562000888885456:3143)
Message:
This is not right please correct
Termes de paiement Foausrnisfseur non spécifiés
impact potentiel: 3 000,00
You should write From field with abc@xyz.com
and not From: field with abc@xyz.com in the column
Date détecté: 2019-02-26 12:55:03


---- Please do not delete or modify this line. (2423000000000149:3143) ----

-------------------------
Sent: Tue Mar 05 15:40:51 IST 2019
From: ytest@xyz.co.in
To: bpcla@xpanxion.com
Subject: Foausrnisfseur invadlide (O4562000888885456:3143)

Я пробовал следующие шаблоны, но это не сработало,

[^.?!]*(?<=[.?\s!])string(?:(?=[\s.?!])[^.?!]*(?:[.?!].*)?)?$    
/^([\w\s\.]*)string([\w\s\.]*)$/    
"^\\w*\\s*((?m)Name.*$)"

Ожидаемый результат, ожидаемый от текста выше:

xtest@xyz.co.in, ytest@xyz.com, ytest @ xyz.co.in,

PS. Я хочу регулярное выражение для логики Java

Ответы [ 4 ]

0 голосов
/ 05 марта 2019
    String emailRegex = "[^\\s]+"; // Replace with a better one
    Matcher m = Pattern.compile("(?m)^From:\\s*(" + emailRegex + ")\\s*$").matcher(yourString);

    List<String> allMatches = new ArrayList<String>();
    while(m.find())
      System.out.println(m.group(1));
0 голосов
/ 05 марта 2019

Используйте это регулярное выражение для вашего случая:

From:\s+([\w-]+@([\w-]+\.)+[\w-]+)

Я пробовал это регулярное выражение с https://www.freeformatter.com/java-regex-tester.html#ad-output, и оно соответствует тому, что вам требуется.

Ваш требуемый матч находится в группе захвата 1.

Рабочая демоверсия: https://regex101.com/r/dGaPbD/4

0 голосов
/ 05 марта 2019

Попробуйте этот шаблон: ^From:\s*(\S+)$

Сначала он соответствует началу строки с ^, затем буквально соответствует From:, затем соответствует 0 или более пробелам с \s*, затем соответствует одному илибольше не белых пробелов и сохраняет их в группе захвата, $ соответствует концу строки.

Чтобы получить адрес электронной почты, просто используйте значение первой группы захвата.

Demo

0 голосов
/ 05 марта 2019
  String test = "   Sent: Tue Mar 05 15:42:11 IST 2019  "
            + "   From: xtest@xyz.co.in  "
            + "   To: akm@xyz.com  "
            + "   Subject: Re: Foausrnisfseur invadlide (030000000000:3143)  "
            + "   Message:   "
            + "     "
            + "     "
            + "   ----------------------------  "
            + "     "
            + "   Sent: Tue Mar 05 15:40:51 IST 2019  "
            + "   From: ytest@xyz.com  "
            + "   To: bpcla@xpanxion.com  "
            + "   Subject: Foausrnisfseur invadlide (O4562000888885456:3143)  "
            + "   Message:  "
            + "   This is not right please correct  "
            + "   Termes de paiement Foausrnisfseur non spécifiés  "
            + "   impact potentiel: 3 000,00  "
            + "   You should write From field with abc@xyz.com  "
            + "   and not From: field with abc@xyz.com in the column  "
            + "   Date détecté: 2019-02-26 12:55:03  "
            + "     "
            + "     "
            + "   ---- Please do not delete or modify this line. (2423000000000149:3143) ----  "
            + "     " + "   -------------------------  "
            + "   Sent: Tue Mar 05 15:40:51 IST 2019  " + "   From: ytest@xyz.co.in  "
            + "   To: bpcla@xpanxion.com  "
            + "  Subject: Foausrnisfseur invadlide (O4562000888885456:3143)  ";

      String emailRegex = "[a-zA-Z0-9._%+-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,6}";
    Pattern pattern = Pattern.compile("From\\:\\s(" + emailRegex + ")");// From\\:\\s same as Form : and () here i added Email Id  regex or you also change to (.*\n) but not recommended
    Matcher match = pattern.matcher(test);
    while (match.find()) {
        System.out.println(match.group(1));
    }

вывод:

 xtest@xyz.co.in
ytest@xyz.com
ytest@xyz.co.in
...