在 Notepad++ 中使用 RegEx 是否有一种简单的方法来区分姓氏和名字
Is there an easy way to distinguish Lastnames and Firstnames using RegEx in Notepad++
我有 20,000 多条记录要处理,但像下面这样的多次传递没问题,当然除非所有这些都可以在一个超级高效的正则表达式中完成?
示例记录:
ABBEY Chantelle - 08.11.1995 - A
ANAND Toni-Grace - 04.09.1999 - A
ADCOCK ALVEY James - 12.04.1992 - C
ADLINGTON-JONES Robin Jacob Sebastian - 15.02.1999 - B
AFZAL Kiera - 25.04.2000 - B
AHMED Nisar Abu Ben Adhem - 16.08.2002 - C
AIRE-DEANE Christopher-James - 06.01.1997 - B
AL-MISRI Yaqoob - 23.07.2004 - C
ASTER Lily-May - 01.04.2010 - B
McQUEEN Stephen - 02.02.2001 - A
期望的输出:
ABBEY¬Chantelle¬08.11.1995¬A
ANAND¬Toni-Grace¬04.09.1999¬A
ADCOCK ALVEY¬James¬12.04.1992¬C
ADLINGTON-JONES¬Robin¬Jacob¬Sebastian¬15.02.1999¬B
AFZAL¬Kiera¬25.04.2000¬B
AHMED¬Nisar¬Abu¬Adhem¬16.08.2002¬C
AIRE-DEANE¬Christopher-James¬06.01.1997¬B
AL-MISRI¬Yaqoob¬23.07.2004¬C
ASTER¬Lily-May¬01.04.2010¬B
McQUEEN Stephen¬02.02.2001¬A
第一关:
查找:^([A-Z]{2,20}-[A-Z]{2,20}) ([A-Za-z]{1,20}) - ([0 -9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
AL-MISRI¬Yaqoob¬23.07.2004¬C
第二遍:
查找:^([A-Z]{2,20}) ([A-Za-z]{1,20}) - ([0-9]{2}.[0 -9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
ABBEY¬Chantelle¬08.11.1995¬A
AFZAL¬Kiera¬25.04.2000¬B
McQUEEN Stephen¬02.02.2001¬A
第三遍:
查找:^([A-Z]{2,20}) ([A-Za-z]{1,20}-[A-Za-z]{1,20}) - ([0-9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
ANAND¬Toni-Grace¬04.09.1999¬A
ASTER¬Lily-May¬01.04.2010¬B
第四遍:
查找:^([A-Z]{2,20}-[A-Z]{2,20}) ([A-Za-z]{1,20}-[A-Za -z]{1,20}) - ([0-9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
AIRE-DEANE¬Christopher-James¬06.01.1997¬B
但是上面的正则表达式无法解释这些记录
ADCOCK ALVEY James - 12.04.1992 - C
ADLINGTON-JONES Robin Jacob Sebastian - 15.02.1999 - B
AHMED Nisar Abu Ben Adhem - 16.08.2002 - C
备注:
所有姓氏都在前面 [大写] 有些可能会连字符,名字(第二名和其他中间名)在 Title Case 中紧随其后,也可能会连字符
在搜索和替换期间在 Notepad++ 中启用了区分大小写 activity。 None 个名字有撇号(例如 O'KEEFE),它们都已被删除
即使只是名称可以排序,我也可以单独处理日期和后缀,任何帮助将不胜感激,因为我仍然是 RegEx 的新手
如果我错过了现有的解决方案,我也提前道歉,以防万一我在这个网站上搜索时没有select正确的标签或术语
我已经查看了这篇文章;但是,它无助于解决我的查询:Regular expression for first and last name
此正则表达式适用于几乎所有名称(不适用于 McQUEEN,因为它不是全部大写):
(([A-Z]+[ \-]){1,})(([A-Z][a-z]+[ \-]){1,})\- ([0-9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])
可以使用的组有\1 \3 \5 \6。
Link 演示:https://regex101.com/r/3LpI54/1
由于所有的可能性,匹配名称并不是那么容易,但是对于给定的示例数据,您可以使用具有 \G
到 select 空格和 -
部分的模式在用 ¬
替换它们之间
使用(?-i)
或勾选匹配大小写复选标记。
(?-i)(?:^(?:Mc)?[A-Z]+(?:[ -][A-Z]+)*|\G(?!^)[A-Z][a-z]+(?:-[A-Z][a-z]+)*|\d{2}\.\d{2}\.\d{4})\K -?\h*
我有 20,000 多条记录要处理,但像下面这样的多次传递没问题,当然除非所有这些都可以在一个超级高效的正则表达式中完成?
示例记录:
ABBEY Chantelle - 08.11.1995 - A
ANAND Toni-Grace - 04.09.1999 - A
ADCOCK ALVEY James - 12.04.1992 - C
ADLINGTON-JONES Robin Jacob Sebastian - 15.02.1999 - B
AFZAL Kiera - 25.04.2000 - B
AHMED Nisar Abu Ben Adhem - 16.08.2002 - C
AIRE-DEANE Christopher-James - 06.01.1997 - B
AL-MISRI Yaqoob - 23.07.2004 - C
ASTER Lily-May - 01.04.2010 - B
McQUEEN Stephen - 02.02.2001 - A
期望的输出:
ABBEY¬Chantelle¬08.11.1995¬A
ANAND¬Toni-Grace¬04.09.1999¬A
ADCOCK ALVEY¬James¬12.04.1992¬C
ADLINGTON-JONES¬Robin¬Jacob¬Sebastian¬15.02.1999¬B
AFZAL¬Kiera¬25.04.2000¬B
AHMED¬Nisar¬Abu¬Adhem¬16.08.2002¬C
AIRE-DEANE¬Christopher-James¬06.01.1997¬B
AL-MISRI¬Yaqoob¬23.07.2004¬C
ASTER¬Lily-May¬01.04.2010¬B
McQUEEN Stephen¬02.02.2001¬A
第一关:
查找:^([A-Z]{2,20}-[A-Z]{2,20}) ([A-Za-z]{1,20}) - ([0 -9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
AL-MISRI¬Yaqoob¬23.07.2004¬C
第二遍:
查找:^([A-Z]{2,20}) ([A-Za-z]{1,20}) - ([0-9]{2}.[0 -9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
ABBEY¬Chantelle¬08.11.1995¬A
AFZAL¬Kiera¬25.04.2000¬B
McQUEEN Stephen¬02.02.2001¬A
第三遍:
查找:^([A-Z]{2,20}) ([A-Za-z]{1,20}-[A-Za-z]{1,20}) - ([0-9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
ANAND¬Toni-Grace¬04.09.1999¬A
ASTER¬Lily-May¬01.04.2010¬B
第四遍:
查找:^([A-Z]{2,20}-[A-Z]{2,20}) ([A-Za-z]{1,20}-[A-Za -z]{1,20}) - ([0-9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])$
正则表达式:\1¬\2¬\3¬\4
结果:
AIRE-DEANE¬Christopher-James¬06.01.1997¬B
但是上面的正则表达式无法解释这些记录
ADCOCK ALVEY James - 12.04.1992 - C
ADLINGTON-JONES Robin Jacob Sebastian - 15.02.1999 - B
AHMED Nisar Abu Ben Adhem - 16.08.2002 - C
备注:
所有姓氏都在前面 [大写] 有些可能会连字符,名字(第二名和其他中间名)在 Title Case 中紧随其后,也可能会连字符
在搜索和替换期间在 Notepad++ 中启用了区分大小写 activity。 None 个名字有撇号(例如 O'KEEFE),它们都已被删除
即使只是名称可以排序,我也可以单独处理日期和后缀,任何帮助将不胜感激,因为我仍然是 RegEx 的新手
如果我错过了现有的解决方案,我也提前道歉,以防万一我在这个网站上搜索时没有select正确的标签或术语
我已经查看了这篇文章;但是,它无助于解决我的查询:Regular expression for first and last name
此正则表达式适用于几乎所有名称(不适用于 McQUEEN,因为它不是全部大写):
(([A-Z]+[ \-]){1,})(([A-Z][a-z]+[ \-]){1,})\- ([0-9]{2}.[0-9]{2}.[0-9]{4}) - ([A|B|C])
可以使用的组有\1 \3 \5 \6。
Link 演示:https://regex101.com/r/3LpI54/1
由于所有的可能性,匹配名称并不是那么容易,但是对于给定的示例数据,您可以使用具有 \G
到 select 空格和 -
部分的模式在用 ¬
使用(?-i)
或勾选匹配大小写复选标记。
(?-i)(?:^(?:Mc)?[A-Z]+(?:[ -][A-Z]+)*|\G(?!^)[A-Z][a-z]+(?:-[A-Z][a-z]+)*|\d{2}\.\d{2}\.\d{4})\K -?\h*