none
Обработка текстового файла регулярками RRS feed

  • Вопрос

  • День добрый.

    Имеется текстовый файл, содержащий множество строк с почтовыми ящиками.
    Нужно преобразовать его в другой почтовый файл, в который записать:
    1. Все уникальный домены в формате *@имя_домена. Домен записывается единожды, т.е. не должен повторяться.
    2. Все ящики домена mail.ru поностью, без преобразований.
    Проблема в том, что в строке может быть несколько ящиков, отделяются они между собой запятой, пробелом или кавычками. В строке может быть
    произвольное количество ящиков.
    В качестве примера приложил исходный файл mail_in и результат, который должен быть -  mail_out.

    mail_in:

    a@example1.com
    b@example2.org
    1234@example1.com
    abs123@example1.com
    123456@mail.ru
    egor@example3.com, adf@example4.org
    alisa@example3.com, alisa2@mail.ru
    alisa2@example3.com,alisa3@example3.com
    alex@example4.org alex@example3.com
    alex2@example5.org; alex2@example5.com
    абракадабра

    alex3@example6.org
    alex4@ya.example7.ru

    Mail_out:

    *@example1.com
    *@example2.org
    123456@mail.ru
    *@example3.com
    *@example4.org
    alisa2@mail.ru
    *@example5.org
    *@example5.com
    *@example6.org
    *@ya.example7.ru

    Буду рад любой помощи. Спасибо

    11 декабря 2016 г. 20:26

Ответы

  • PowerShell:

    $reg = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
    gc mail_in.txt | Foreach {$_ -split "[, ;]" -match $reg -replace ".+@(?!mail.ru)","*@"} | Sort -Unique | Out-File mail_out.txt -Enc UTF8
    
    
    PS (STA) > gc mail_in.txt | Foreach {$_ -split ",| |;" -match $reg -replace ".+@(?!mail.ru)","*@"} | Select -Unique
    *@example1.com
    *@example2.org
    123456@mail.ru
    *@example3.com
    *@example4.org
    alisa2@mail.ru
    *@example5.org
    *@example5.com
    *@example6.org
    *@ya.example7.ru



    • Изменено KazunEditor 12 декабря 2016 г. 6:28
    • Помечено в качестве ответа Vadim16271818 13 декабря 2016 г. 17:12
    12 декабря 2016 г. 6:26
    Отвечающий

Все ответы

  • PowerShell:

    $reg = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
    gc mail_in.txt | Foreach {$_ -split "[, ;]" -match $reg -replace ".+@(?!mail.ru)","*@"} | Sort -Unique | Out-File mail_out.txt -Enc UTF8
    
    
    PS (STA) > gc mail_in.txt | Foreach {$_ -split ",| |;" -match $reg -replace ".+@(?!mail.ru)","*@"} | Select -Unique
    *@example1.com
    *@example2.org
    123456@mail.ru
    *@example3.com
    *@example4.org
    alisa2@mail.ru
    *@example5.org
    *@example5.com
    *@example6.org
    *@ya.example7.ru



    • Изменено KazunEditor 12 декабря 2016 г. 6:28
    • Помечено в качестве ответа Vadim16271818 13 декабря 2016 г. 17:12
    12 декабря 2016 г. 6:26
    Отвечающий
  • РАБОТАЕТ!
    13 декабря 2016 г. 17:11