【问题标题】:Using regex cut full name to surname and initials使用正则表达式剪切全名来姓氏和首字母
【发布时间】:2017-12-09 12:26:33
【问题描述】:

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

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

我需要,使用Java方法

replaceAll(String regex, String text) 

制作如下数据集:

Ivanov I. I.,
Petrov P. P.,
Ahmed H.,
Omar S.,
Trump D. J.,
Mohmadi H. A. H.

我尝试使用 - replaceAll("(?:^[A-Za-z']*)|[^\\sА-ЯІЇЄ]", ".")) 但它不起作用。

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

【问题讨论】:

  • 您是否尝试过此问题中提到的建议 - stackoverflow.com/questions/31248856/…
  • 您是否尝试简单地拆分字符串并使用charAt(0) 仅提取第一个字符?
  • 当名字是ten Brink Johannvon Heune Richard时你会怎么做...

标签: java regex text split


【解决方案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 字母

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多