Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-名称模式_Regex_Excel_Vba_Outlook - Fatal编程技术网

Regex 正则表达式-名称模式

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*[.]?)

说到编码,我是个初学者,现在我正在研究如何使用正则表达式

我正在做的是从Outlook 2013中收到的邮件中提取数据。我使用VBA+RegEx提取我需要的数据并将它们合并/传输到Excel工作表,但我的问题是名称。我可以找出所需的模式,因为有很多可能的名称结构

这是一封示例电子邮件

以下是我在VBA中的内容:

.pattern = "(Name[:]+\s*(\w*-\w*)?(\s\w*)?(\s\w*[.]?)?(\s\w*[.]?)?[,]?(\s\w*[.]?)?(\s\w*[.]?)?(\s\w*[.]?))"
以下是可能出现在收到的邮件上的可能的姓名模式/组合列表:

  • 姓(马)吉文纳姆(小)
  • 姓(马)吉文纳姆吉文纳姆
  • 姓(马)吉文纳姆吉文纳姆吉文纳姆
  • lastname lastname,(马萨诸塞州)Givenname Givenname Givenname
  • 姓。姓氏(小),(马)吉文纳姆吉文纳姆(小)
  • 最后一个ñame,(Ma.)givename givename givename-*这就是它变得棘手的地方,我似乎找不到办法将它插入我的正则表达式中

  • 不要试图包含所有特定的模式。我们不能把它们都想起来

    你为什么不用这个

    (?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]*:|$)