我有一个包含允许字符i的值列表。e.-
ALLOWED_CHARS = """[âäàáãåçñéêëèíîïìߣ¬ÂÄÀÁÃÅÇѦøÉÊËÈÍÎÏÌØ«»ðýþ±°ªºæ¸Æ€µ¯¡¿ÐÝÞ®¢¥·©§¶¼½¾^¨×ôöòóõ¹ûüùúÿ²ÔÖÒÓÕ³ÛÜÙÚ]"""
上面的列表值和ASCII
值是允许的,如果除此之外的任何其他值都应该给予错误。
对于ASCII
和其他字符的组合(例如:任何中文/日文)它给我一个错误,而从ALLOWED_CHARS
列表和其他字符(例如:任何中文/日文)它不会给我一个错误。
例如:
input:
+-----------+
|middle_name|
+-----------+
| ELIZABET@|
| ROBERT|
| ELIZABET弟|
| ELIZABETH|
| ELIZABETH|
| ELI弟ABEßH|
+-----------+
Current Output:
+-----------+
|middle_name|
+-----------+
| |
| |
| ELIZABET弟|
| |
| |
| |
+-----------+
Expected Output:
+-----------+
|middle_name|
+-----------+
| |
| |
| ELIZABET弟|
| |
| |
|ELI弟ABEßH |
+-----------+
ELIZABET弟
contains 弟(Chinese letter) and ascii values and it gives an error, which is correct. ELI弟ABEßH
contains 弟(Chinese letter) and ß(present in ALLOWED_CHARS
) should give an error but it doesn't.
你能帮我一下吗。
我正在检查多列的上述条件
isAsciiUdf = udf(lambda z: z.isascii())
for i in colList:
df = df.withColumn(i, when(isAsciiUdf(col(i)) == "false", col(i)).otherwise(""))
df = df.withColumn(i, when(~(col(i).rlike(ALLOWED_CHARS)), col(i)).otherwise(lit("")))
在这里,我首先检查列值是否为非ascii,然后获取列值。然后,我检查ALLOWED_CHARS
中是否不存在列值,然后获取这些列值。
3条答案
按热度按时间eanckbw91#
试试这个:
输出为:
正则表达式模式的解释:
^
:表示“不”。\x00-\x7F
:表示ASCII字符{ALLOWED_CHARS}
:添加f-string格式中允许的非ASCII字符。shyt4zoc2#
只需将ALLOWED_CHARS更改为
你的代码工作!!!把你想要的任何字符放在括号之间!!!!我还在ALLOWED_CHAR中添加了ASCII字符。例如:
另外,如果你不想保留行,你可以简单地用途:
bbmckpt73#
对于特定的过滤,rlike()似乎是一个更合乎逻辑的选择。