Извлеките определенный блок текста c и поместите его в новый документ - PullRequest
0 голосов
/ 27 мая 2020

Я использую EmEditor и вижу, что есть функция «найти и извлечь в новый документ», которая поддерживает операторы Regex. Я пытаюсь извлечь определенный c текст из текстового файла почтового ящика Thunderbird. В почтовом ящике есть копии чатов обслуживания клиентов. К сожалению, поскольку мы используем бесплатную версию этой программы чата, она не позволяет экспортировать данные. В теле письма много текста, включая чаты и расшифрованные вложения. Но внизу каждого чата указано имя, адрес электронной почты, название компании и т. Д. c.

Это выглядит так:

Name: Tan
Email: someone@domcin.com
Operator: OperatorName
Start Time: 07/01/2014 14:43:47
End Time: 07/01/2014 15:35:22
Product/Service: Delivery
Phone: 123 1234567
Company: MyCompany Inc.

Я пытаюсь извлечь имя, адрес электронной почты, оператор, продукт, телефон и компания. Что еще хуже, не у всех есть компания, поскольку есть и частные лица. Также на телефоне иногда есть +60 или (60) или пробелы, так как пользователь чата может вводить то, что мы хотим. Я могу сделать это вручную, но это 6k записей.

Вопрос в том, будет ли выражение регулярного выражения для их поиска. Затем я мог бы использовать EmEditor, чтобы найти этот блок и поместить результат в новый документ, и после небольшой настройки я смогу создать файл Excel для импорта в CRM.

Если это не работает с regex, чем кто-нибудь знает об умном способе сделать это, чтобы мне не нужно было копировать и вставлять все это?

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Если я правильно понимаю ваш вопрос, вы хотите широко манипулировать своим исходным файлом, чтобы поместить его в какой-то csv для загрузки в excel, et c.

Используя EmEditor, вы можно попробовать следующие шаги (при условии, что упомянутые образцы полей):

1) удалить пустые строки [необязательно]

2) Найти: ^ (. *) \ r? \ n (?! Имя) Заменить: \ 1 \ t

3) Найти: ((Имя | Электронная почта | Оператор | Время начала | Время окончания | Продукт / услуга | Телефон | Компания):?) Заменить: [ничего не оставлять пустым]

4) Добавьте строку заголовка

Я превратил это в макрос, который вы можете попробовать на копии вашего исходного файла, и, надеюсь, предоставил выходной файл, разделенный табуляцией:

editor.ExecuteCommandByID(3882);        //Heading = 0
editor.ExecuteCommandByID(4323);        //Remove existing bookmarks

document.selection.Find("^[ \\t]*$\x0a",eeFindNext | eeFindReplaceCase | eeFindReplaceRegExp | eeFindCount | eeFindBookmark,0); //Bookmark blank lines
editor.ExecuteCommandByID(4589);        //Delete Bookmarked lines 

document.selection.Replace("^(.*)\\r?\\n(?!Name)","\\1\\t",eeFindReplaceCase | eeReplaceAll | eeFindReplaceRegExp,0);       //Find:^(.*)\r?\n(?!Name)       R:^(.*)\r?\n(?!Name)
document.selection.Replace("((Name|Email|Operator|Start Time|End Time|Product\\/Service|Phone|Company): ?)","",eeFindReplaceCase | eeReplaceAll | eeFindReplaceRegExp,0);   //Find:((Name|Email|Operator|Start Time|End Time|Product\/Service|Phone|Company): ?)    R:[blank]

document.selection.StartOfDocument(false);          //Ctrl-Home, insert blank line, and header line
document.selection.NewLine(1);
document.selection.StartOfDocument(false);          //Ctrl-Home
document.write("Name\tEmail\tOperator\tStart Time\tEnd Time\tProduct\/Service\tPhone\tCompany");    editor.ExecuteCommandByID(3901);        // Adjust separator visible lines only

editor.ExecuteCommandByID(3894); //Heading=1
0 голосов
/ 27 мая 2020

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

^(?:Name|Email|Operator|Start Time|End Time|Product\/Service|Phone|(?:Company?)).*$

Объяснение вышеуказанного регулярного выражения:

^ - представляет начало данной тестовой строки.

(?:Name|Email|Operator|Start Time|End Time|Product\/Service|Phone|(?:Company?)) - представляет группу без захвата, содержащую любое из заданных полей. Поле уведомления Company может появляться 0 или 1 раз в совпадении.

| - представляет собой чередование.

.* - это жадно соответствует всему, кроме новой строки.

$ - представляет конец данной тестовой строки.

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

...