0

我正在使用 EmEditor,我看到有一个支持 Regex 语句的“查找并提取到新文档”功能。我正在尝试从 Thunderbird 邮箱文本文件中提取一些特定的文本。邮箱里有客服聊天记录的副本。不幸的是,因为我们使用这个聊天程序的免费版本,它不允许导出数据。电子邮件正文中有很多文本,包括聊天和解码的附件。但在每个聊天的底部是姓名、电子邮件、公司名称等。

它看起来像这样:

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 中。

如果这不适用于正则表达式,那么没有人知道这样做的聪明方法,所以我不必复制和粘贴所有这些?

4

2 回答 2

0

您可以使用以下正则表达式来实现您的结果:

^(?: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 次。

|- 代表交替。

.*- 这会贪婪地匹配除换行符之外的任何内容。

$- 表示给定测试字符串的结尾。

您可以在此处找到上述正则表达式的演示。

于 2020-05-27T08:38:23.680 回答
0

如果我正确理解您的问题,您希望广泛地操作您的源文件,以便将其转换为某种 csv,以便加载到 excel 等中。

使用 EmEditor 您可以尝试以下步骤(假设提到的示例字段):

1) 删除空行[可选]

2) 查找:^(.*)\r?\n(?!Name) 替换:\1\t

3) Find:((Name|Email|Operator|Start Time|End Time|Product/Service|Phone|Company): ?) Replace:[nothing leave blank]

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
于 2020-05-30T19:55:56.523 回答