Возврат только одной группы с условием ИЛИ в регулярном выражении

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

Regex:

\[mailto:(.+)\]|<(.+@.+\..+)>

Строка ввода:

Hello my Email Address is <foo@hotmail.com> - Return foo@hotmail.com as Group1.
Hello my Email Address is [mailto: foo@hotmail.com] - Return foo@hotmail.com as Group2.

Я хочу, если какая-либо строка соответствует, то она должна быть возвращена в Group1.

Есть какой-либо способ сделать это?

2 ответа

Решение

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

(?=\S+@)([^<\s]+@.*(?=[>\]]))
  • (?=\S+@) Позитивный взгляд, утверждаю, что то, что следует, это любые непробельные символы, сопровождаемые @,
  • ([^<\s]+@.*(?=[>\]])) Захват группы. Захватить любой не пробел, не ^ за персонажем следует @и что угодно до ] или же > персонаж.

Вы можете проверить регулярное выражение здесь.

Вы можете сначала сопоставить любой из них и утверждать, что он заканчивается на..>или сопоставить[mailto: и утверждать, что оно заканчивается

Чтобы предотвратить ненужный возврат и предотвратить чрезмерное сопоставление, вы можете использовать отрицательный класс символов , обозначаемый[^

      (?:<(?=[^<>]*>)|\[mailto:\s*(?=[^][]*]))([^\s@]+@[^\s@]+\.\w{2,})

Узор соответствует:

  • (?:Группа без захвата для альтернатив
    • <(?=[^<>]*>)Сопоставить и утверждать...>без какого-либо возникновения<или>между
    • |Или
    • \[mailto:\s*соответствовать[mailto:за которым следуют необязательные пробелы
    • (?=[^][]*])Позитивный просмотр вперед, утверждает соответствие необязательных символов, отличных от[или и сопоставить]
  • Закройте группу без захвата
  • (Группа захвата 1
    • [^\s@]+Соответствует 1+ символам, кроме @ или символа пробела.
    • @Сопоставьте @
    • [^\s@]+\.\w{2,}Сопоставьте 1+ символов, кроме @ или символа пробела, за которым следует точка, и 2 или более символов слова (вы можете сделать TLD настолько конкретным, насколько хотите).
  • )Закрыть группу 1

Посмотреть демонстрацию регулярных выражений

Другие вопросы по тегам