Я пытаюсь удалить все, кроме электронной почты, но я получаю противоположное - PullRequest
0 голосов
/ 10 января 2020

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

Пример:

| RONNAN FERREIRA | RENANRFCRON@GMAIL.COM 17933 | RONNE YAN CANAVARRO DE ASSIS |

Это регулярное выражение, кажется, выбирает каждое электронное письмо идеально:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

Когда я ставлю $1 или \1 на "заменить на" он просто удаляет все письма, я хочу, чтобы он делал наоборот.

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Другим вариантом может быть либо захват формата электронной почты в группе захвата, либо сопоставление всех частей, разделенных на 1+ или более горизонтальных символов пробела, которые не содержат @.

Чтобы соответствовать только пробелам после электронное письмо, кроме последнего, вы можете использовать условное , имеющее форму (?(?=regex)then|else)

. В качестве замены используйте $1

([^\h@]+@[^\h@]+(?(?=[^@\r\n]*@)\h+))|\h*(?<!\S)[^\h@]+(?:\h+[^\h@]+)*(?!\S)\h*

По частям:

  • ( Захват группа 1
    • [^\h@]+@[^\h@]+ Соответствует формату электронной почты, подобному
    • (?(?=[^@\r\n]*@)\h+) Условно , сопоставьте 1+ горизонтальные пробельные символы, если есть другой адрес электронной почты
  • ) Закрыть группу
    • | Или
  • \h* Совпадение 0+ горизонтальных пробельных символов
  • (?<!\S) Утверждение того, что слева, не является непробельным символом
  • [^\h@]+(?:\h+[^\h@]+)* Повторите, сопоставляя части, которые не имеют @
  • (?!\S) Утверждение, что справа, не является символом без пробелов
  • \h* Соответствие 0+ горизонтальный пробел ce chars

Regex demo

Тест для примера содержимого с несколькими адресами электронной почты

| RONNAN FERREIRA | RENANRFCRON@GMAIL.COM 17933 | RONNE YAN CANAVARRO DE ASSIS | RENANRFCRON@GMAIL.COM 17933 |

enter image description here

0 голосов
/ 10 января 2020
  • Ctrl + H
  • Найти что: \G.*?(\S+@\S+)(?:(?=.*@)|.*$)
  • Заменить на: $1 <- есть пробел после $ 1, вы можете добавить любой символ в качестве разделителя </li>
  • CHECK Обернуть вокруг
  • CHECK Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Объяснение:

\G              # restart from last match position
.*?             # 0 or more any character, not greedy
(\S+@\S+)       # group 1, an email
(?:             # non capture group
  (?=.*@)       # positive lookahead, check if we have an @  after
 |            # OR
  .*$           # 0 or more any character until end of line
)               # end group

Снимок экрана (до):

enter image description here

Снимок экрана (после):

enter image description here

...