提取特定的文本块并将其放置在新文档中



我正在使用EmEditor,我看到有一个支持正则表达式语句的"查找并提取到新文档"函数。 我正在尝试从雷鸟邮箱文本文件中提取一些特定文本。邮箱中有客户服务聊天的副本。不幸的是,由于我们使用此聊天程序的免费版本,因此不允许导出数据。在电子邮件的正文中有很多文本,包括聊天和解码的附件。但是在每个聊天的底部是姓名,电子邮件,公司名称等。

它看起来像这样:

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。

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

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

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

|- 表示交替。

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

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

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

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

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

1( 删除空行 [可选]

2( 查找:^(.*(\r?(?!名称( 替换:\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("NametEmailtOperatortStart TimetEnd TimetProduct/ServicetPhonetCompany");    editor.ExecuteCommandByID(3901);        // Adjust separator visible lines only
editor.ExecuteCommandByID(3894); //Heading=1

相关内容

  • 没有找到相关文章

最新更新