java - 需要帮助使用 java 正则表达式将中间首字母从名称末尾移动到中间

标签 java regex

我之前曾就此做过一个主题,但它被关闭并标记为“偏离主题”。我尝试阅读常见问题解答,但不明白为什么,如果这也是题外话,请原谅我,但我对这个问题还有一些其他问题。

我有一个包含以下格式的全名的字段: 第一,最后(MI)

挑战:

  • 中间名首字母并不总是存在,因为某些条目没有列出中间名首字母。

  • 某些中间名首字母末尾有句点。

  • 许多姓名都是西类牙语姓名,因此可以有多个名字和姓氏,因此不能用空格分隔字段。

  • 名称字段末尾可能有空格。

  • 中间名可能包含重音字符(我找不到任何以重音开头的西类牙语中间名,但我不能确定我们不会有任何重音字符)。

到目前为止我做了什么:

  • 我做的第一件事是使用 trim() 删除字段末尾的任何填充。

    FName.trim()

  • 接下来,我将姓名分为名字和姓氏,如下所示:

    String[] 名称 = FName.split(",");

  • 我需要将中间名与姓氏分开,然后我可以执行以下操作:

    FName = 名称[0] + ""名称 [1] + ""+ 名称 [2]

我坚持的是什么:

我需要使用 RegEx 检查姓氏并查看最后一个字符是否是句点。如果是,那么我需要检查它前面的字符是否是空格+字母(可能有重音)。如果没有句点,我仍然需要检查是否有空格+字母。

例如:

John, Doe F  --> John F Doe
John, Doe F. --> John F. Doe

我需要稍后删除逗号,但通过执行 FName.replace(",","") 可以轻松解决此问题

一些更具挑战性的名称示例:

VICTOR, RAMIREZ-BRIANO M
FELIX, DEL VALLE-ORTIZ G.
SANDRA, DE LEON MENDOZA A
MARIA, HERNANDEZ-DE LA TORRE ISABEL J.
CARLOS ARMANDO, PEREZ-FERNANDEZ L
J. CONCEPCION, RODRIGUEZ-BALDERAS
MIGUEL A, LUZURIAGA-ALVAREZ

最佳答案

您可以用一行完成:

name = name.replaceAll(",(.*?)( \\w\\.?)?$", "$2$1");

无论中间名首字母是否出现在末尾,这都有效。

<小时/>

这是使用上述行的一些测试代码以及​​问题中的示例:

String[] names = { "John, Doe F", "John, Doe F.", "John, Doe", "VICTOR, RAMIREZ-BRIANO M", "FELIX, DEL VALLE-ORTIZ G.", "SANDRA, DE LEON MENDOZA A", "MARIA, HERNANDEZ-DE LA TORRE ISABEL J.", "CARLOS ARMANDO, PEREZ-FERNANDEZ L", "J. CONCEPCION, RODRIGUEZ-BALDERAS", "MIGUEL A, LUZURIAGA-ALVAREZ" };
for (String name : names)
    System.out.println(name + " --> " + name.replaceAll(",(.*?)( \\w\\.?)?$", "$2$1"));

输出:

John, Doe F --> John F Doe
John, Doe F. --> John F. Doe
John, Doe --> John Doe
VICTOR, RAMIREZ-BRIANO M --> VICTOR M RAMIREZ-BRIANO
FELIX, DEL VALLE-ORTIZ G. --> FELIX G. DEL VALLE-ORTIZ
SANDRA, DE LEON MENDOZA A --> SANDRA A DE LEON MENDOZA
MARIA, HERNANDEZ-DE LA TORRE ISABEL J. --> MARIA J. HERNANDEZ-DE LA TORRE ISABEL
CARLOS ARMANDO, PEREZ-FERNANDEZ L --> CARLOS ARMANDO L PEREZ-FERNANDEZ
J. CONCEPCION, RODRIGUEZ-BALDERAS --> J. CONCEPCION RODRIGUEZ-BALDERAS
MIGUEL A, LUZURIAGA-ALVAREZ --> MIGUEL A LUZURIAGA-ALVAREZ

关于java - 需要帮助使用 java 正则表达式将中间首字母从名称末尾移动到中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23695785/

相关文章:

java - 如何同时瞄准朱诺号和开普勒号

java - 如何从文件中读取由返回分隔的字符串

java - 没有找到条件时如何返回null?

php - 如何将 '\\\' 替换为 '\' ?

python - 如何正确拆分此字符串列表?

java - 两个键是相同的 hashMap 覆盖写“现有的?

java - 如何在 TextView 中显示 SharedPreferences 字符串?

python - 正则表达式匹配特定方法的 javadoc 注释 (python)

python - 在Python中使用正则表达式搜索从PDF转换的类(class)

java - 正则表达式测试否定模式超过一个单词