在Sp中使用标点的非闭合字符类

2024-09-28 22:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个正则表达式模式来删除字符串中的标点符号。我决定使用string库中的punctuation。但是,当我执行它时,Spark返回一个错误,其中有一个未闭合的字符。在

我怀疑punctuation中的字符在执行过程中结束了一个引号。我觉得这应该很容易解决,但我不确定如何解决。我的代码如下:

from pyspark.sql.functions import regexp_replace, trim, col, lower
import string

def removePunctuation(column):

    no_punct = regexp_replace(column, string.punctuation, '')
    lowered = lower(no_punct)
    cleaned = strip(lowered)
    return cleaned

我得到这个错误org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 86.0 failed 1 times, most recent failure: Lost task 0.0 in stage 86.0 (TID 3709, localhost): java.util.regex.PatternSyntaxException: Unclosed character class near index 31


Tags: noimportstringfailure错误column字符lower
3条回答

你可以只包括你想要的东西:数字、字母和空格

return lower(trim(regexp_replace(regexp_replace(column, '[^\w\s]', ''),'_','')))

简单明了:

regexp_replace(column, "\p{Punct}", "")

要使用string.punctuation,您必须转义单个字符并将它们放入字符集中,但这很容易出错,而且很难看:

^{pr2}$
column = regexp_replace(column, '[^\w\s]', '')
column = regexp_replace(column, '_', '')

请注意,下划线被视为合法的字母数字字符,因此需要特殊删除。在

相关问题 更多 >