Kis*_*dav 0 python string bigdata apache-spark pyspark
我想屏蔽电子邮件 - “@”之前的第一个和最后一个字符保持未屏蔽,其余字符应屏蔽。
对于电话号码,第一位和最后一位数字保持未屏蔽,其余数字将被屏蔽。
输入:
from pyspark.sql import functions as F
df = spark.createDataFrame(
[(1, 'Aman', 27, 'aman_93@gmail.com', '9923150074'),
(2, 'Prateek', 28, 'prateek_gulati@reddit.com', '8727451936'),
(3, 'Rajat', 27, 'goyal.rajat@gmail.com', '9871288442')],
['Customer_Number', 'Customer_Name', 'Customer_Age', 'Email', 'Mobile']
)
Run Code Online (Sandbox Code Playgroud)
脚本:
df = df.withColumn('Email', F.regexp_replace('Email', '(?<!^).(?=.+@)', '*'))
df = df.withColumn('Mobile', F.regexp_replace('Mobile', '(?<!^).(?!$)', '*'))
df.show()
# +---------------+-------------+------------+--------------------+----------+
# |Customer_Number|Customer_Name|Customer_Age| Email| Mobile|
# +---------------+-------------+------------+--------------------+----------+
# | 1| Aman| 27| a*****3@gmail.com|9********4|
# | 2| Prateek| 28|p************i@re...|8********6|
# | 3| Rajat| 27|g*********t@gmail...|9********2|
# +---------------+-------------+------------+--------------------+----------+
Run Code Online (Sandbox Code Playgroud)
它是通过正则表达式lookarounds启用的。
对于电子邮件,*当满足 2 个条件时,将每个字符替换为:
(?<!^)意味着在此字符之前不能有字符串的开头(?=.+@)表示在此字符之后必须至少有一个字符后跟@符号*对于移动设备,当满足 2 个条件时,您可以将每个字符替换为:
(?<!^)- 与上面相同 - 意味着在此字符之前不能有字符串的开头(?!$)意味着在此字符之后不能有字符串结尾