如何去除姓名首字母中的点和空格

Posted

技术标签:

【中文标题】如何去除姓名首字母中的点和空格【英文标题】:How to remove dots and spaces in initials of a name 【发布时间】:2021-04-11 20:45:48 【问题描述】:

我有一个 pyspark 数据框,其名称如下:

J.J.斯科特 J. S.乔伊斯 房车。布拉德利·卡特

其中一些在首字母之间包含点和空格,而有些则没有。它们如何转换为:

JJ 斯科特 JS 乔伊斯 RV 布拉德利卡特

(首字母和姓名之间没有点和空格,首字母和姓名之间有 1 个空格)

我尝试使用以下内容,但它只替换点并且不会删除首字母之间的空格:

names_modified = names.withColumn("name_clean", regexp_replace("name", r"\.",""))

谢谢!

【问题讨论】:

【参考方案1】:

可以使用transform 进行一些进一步的操作。想法是使用空格分割名称,并通过仅在长度超过 1 个字符的字符串之间添加空格来重新组合它们,这样首字母将在没有空格的情况下组合。

import pyspark.sql.functions as F

names_modified = names.withColumn(
    'name_clean',
    F.expr("""
        concat_ws('',
            transform(
                split(replace(name, '.', ''), ' '),
                (x, i) -> case when i = 0 then x
                               when length(x) > 1 then concat(' ', x)
                               else x
                          end
            )
        )
    """)
)

names_modified.show()
+------------------+-----------------+
|              name|       name_clean|
+------------------+-----------------+
|        J.J. Scott|         JJ Scott|
|       J. S. Joyce|         JS Joyce|
|RV. Bradley Carter|RV Bradley Carter|
+------------------+-----------------+

【讨论】:

以上是关于如何去除姓名首字母中的点和空格的主要内容,如果未能解决你的问题,请参考以下文章

java如何给中文名字 按拼音的首字母分组

NSString 中的大写首字母

以首字母大写的方式显示所有员工的姓名.(Oracle数据库脚本)

JS实现首字母排序

word怎样取消句首字母大写

取消word 句首字母自动大写