如何使用正则表达式提取名字?

时间:2016-08-01 11:54:43

标签: regex

我的输入字符串如下所示:

Employee: Joe Banana
Department: Sales 
Location: New York

Bla bla bla

Note:

even more bla

这个正则表达式提取全名,即Joe Banana

(?s).*(?-s)(?m)^\s*(Employee): .*\s(.*)$(?-m)(?s).*(?-s)(?m)^\s*(Note):$(?-m)(?s).*

但是这不适用于名字,而是提取部门:

(?s).*(?-s)(?m)^\s*(Employee): (.*)\s.*$(?-m)(?s).*(?-s)(?m)^\s*(Note):$(?-m)(?s).*

为什么这些正则表达式不提取名字和姓氏?

我需要继续搜索这些群组,因为我们需要在注意后停止搜索:

4 个答案:

答案 0 :(得分:2)

你走了:

Employee:\s*(?P<employee>.+)[\n\r]
Department:\s*(?P<department>.+)

请参阅a demo on regex101.com(并注意不同的修饰符!)

答案 1 :(得分:1)

尝试这一个,第一个匹配组是第二个匹配组的第一个名称:

  

^员工(M +):\ S +(W +)\ S +(W +)

或在你的正则表达式中用(w +)\ s +(w +)替换(。*):

  

- ^ \ S (员工)(S')。(S')(M +):    \ S(W +)\ S +(W +)$ - ( - S')^ \ S *(注)(M +)(S')。(M +):$( - 米)(αS)*

答案 2 :(得分:0)

我想出了这个

FIRSTNAME

(?s).*(?-s)(?m)^\s*(Employee): (.*?)\s.*$(?-m)(?s).*(?-s)(?m)^\s*(Note):$(?-m)(?s).*

LASTNAME

(?s).*(?-s)(?m)^\s*(Employee): .*?\s(.*)$(?-m)(?s).*(?-s)(?m)^\s*(Note):$(?-m)(?s).*

答案 3 :(得分:0)

如果你使用它,第一个捕获组将是第一个名称,第二个将是姓氏:

Employee:\s+(\w+)\s+(\w+)