在 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

第一关:

第二遍:

第三遍:

第四遍:

但是上面的正则表达式无法解释这些记录

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*

Regex demo