Regex 正则表达式-名称模式
说到编码,我是个初学者,现在我正在研究如何使用正则表达式 我正在做的是从Outlook 2013中收到的邮件中提取数据。我使用VBA+RegEx提取我需要的数据并将它们合并/传输到Excel工作表,但我的问题是名称。我可以找出所需的模式,因为有很多可能的名称结构 这是一封示例电子邮件 以下是我在VBA中的内容:Regex 正则表达式-名称模式,regex,excel,vba,outlook,Regex,Excel,Vba,Outlook,说到编码,我是个初学者,现在我正在研究如何使用正则表达式 我正在做的是从Outlook 2013中收到的邮件中提取数据。我使用VBA+RegEx提取我需要的数据并将它们合并/传输到Excel工作表,但我的问题是名称。我可以找出所需的模式,因为有很多可能的名称结构 这是一封示例电子邮件 以下是我在VBA中的内容: .pattern = "(Name[:]+\s*(\w*-\w*)?(\s\w*)?(\s\w*[.]?)?(\s\w*[.]?)?[,]?(\s\w*[.]?)?(\s\w*[.]?)
.pattern = "(Name[:]+\s*(\w*-\w*)?(\s\w*)?(\s\w*[.]?)?(\s\w*[.]?)?[,]?(\s\w*[.]?)?(\s\w*[.]?)?(\s\w*[.]?))"
以下是可能出现在收到的邮件上的可能的姓名模式/组合列表:
不要试图包含所有特定的模式。我们不能把它们都想起来 你为什么不用这个
(?i)Name:(?:.|[\n\r\t\s])*?(?=[\n\r\t\s]*(?:Department|ID|Shift|Name)[\n\r\t\s]*:|$)
您已经告诉我们可能的输入组合是什么,但没有告诉我们您希望相应的输出是什么。对于上述6种情况,您需要告诉我们您希望输出是什么。为什么不
Name:\s*(.+)
?如果您只需要在Name:
和0+空格字符之后获取该行的所有剩余部分,那么它应该可以工作。然后,如果组1,您可能会得到该值,如果需要,甚至可以使用逗号分割。如果需要分隔名字和姓氏:name:\s(+),\s(+)
使用此选项学习正则表达式:您可以粘贴到数据集中,然后修改正则表达式,直到它按需要工作。谢谢大家的建议!他们都很有帮助,我学到了新东西!另外,我刚刚意识到电子邮件是基于模板的,所以它的外观和信息的提供方式总是一样的。因为“名称”部分总是有一个名称,所以我将遵循下面的建议。根据我的经验,“\s”只包括两个Unicode,\u0020和\u00A0。”\n'和'\r'与'\s'不同。它们被称为运输或线路返回\“t”是插入的选项卡。\s
表示任何类型的操作系统空白,即[\t\r\n\f\v]
(?i)Name:(?:.|[\n\r\t\s])*?(?=[\n\r\t\s]*(?:Department|ID|Shift|Name)[\n\r\t\s]*:|$)