使用正则表达式剪切全名到姓氏和姓名首字母

时间:2017-12-09 12:26:33

标签: java regex text split

我有一个全名的数据集,如:

discord.js

我需要,使用Java方法

Ivanov Ivan Ivanovich,
Petrov Petr Petrovich,
Ahmed Hasan,
Omar Singh,
Trump Donald John,
Mohmadi Hussein Ahmad Husseini

制作如下数据集:

replaceAll(String regex, String text) 

我尝试使用 - Ivanov I. I., Petrov P. P., Ahmed H., Omar S., Trump D. J., Mohmadi H. A. H. ,但它不起作用。

我需要使用什么正则表达式?

1 个答案:

答案 0 :(得分:1)

如果您正在寻找单个方法调用正则表达式解决方案,请使用\G使用此正则表达式:

name = name.replaceAll("(\\p{L}+|\\G)(\\h+\\p{L})\\p{L}*", "$1$2.");

RegEx Demo

\G在上一场比赛结束或第一场比赛的字符串开头处断言位置

RegEx分手:

  • (\\p{L}+|\\G):在第1组
  • 中捕获名字或上一场比赛结束
  • (\\h+\\p{L}):捕获空白区域并在组#2
  • 中开始使用下一个名称组件的字母
  • \\p{L}*:后跟0个或更多unicode字母