【问题标题】:how to remove star * from string using regex in pyspark如何使用 pyspark 中的正则表达式从字符串中删除星 *
【发布时间】:2016-07-21 19:11:38
【问题描述】:

我刚启动 PySpark,任务如下:

我有一个输入:

我需要使用正则表达式来删除标点符号以及所有前导或尾随空格和下划线。输出全部小写。

我想的不完整:

sentence = regexp_replace(trim(lower(column)), '\\*\s\W\s*\\*_', '')

结果是:

如何在此处修复正则表达式?我需要在这里使用 regexp_replace。

非常感谢。

【问题讨论】:

  • 文本是什么?预期的结果是什么?
  • 尝试^[ \t_*]+|[ \t_*]+$(或者 - 如果默认情况下未启用多行 - (?m)^[ \t_*]+|[ \t_*]+$)。如果它不起作用,请准确说明您需要删除什么并提供输入/预期输出样本。
  • 预期的是:hi youno underscoreremove punctuation then spaces,谢谢
  • 有了这些结果,相同的正则表达式将使" The Elephant's 4 cats. " 变为"the elephants 4 cats"
  • 看来你可以用^\W+|\W+$|[^\w\s]+|_。 ^ 和 $ 锚点必须匹配行的开始/结束。如果模式不能跨行溢出。将\W+$ 替换为[^\w\n]+$,将^\W+ 替换为^[^\w\n]+

标签: regex pyspark


【解决方案1】:

你可以使用

^\W+|\W+$|[^\w\s]+|_

^$ 锚点必须匹配行的开始/结束。

如果模式不能跨行溢出,请将\W+$ 替换为[^\w\n]+$,将^\W+ 模式替换为^[^\w\n]+

^[^\w\n]+|[^\w\n]+$|[^\w\s]+|_

请参阅regex demo

解释

  • ^ - 行首(如果默认开启多行选项,则尝试在模式开始处添加(?m)
  • [^\w\n]+ - 1 个或多个非单词字符(非[a-zA-Z0-9_]),换行符除外
  • | - 或
  • [^\w\n]+$ - 行尾有 1 个或多个非单词字符 ($)
  • | - 或
  • [^\w\s]+ - 1 个或多个非单词字符,任何空格除外
  • | - 或
  • _ - 一个下划线。

如果你并不真正关心 Unicode(我使用了可以识别 Unicode 的 \w\s),你可以只使用更短、更简单的模式:

^[^a-zA-Z\n]+|[^a-zA-Z\n]+$|[^a-zA-Z\s]+

this regex demo

【讨论】:

    【解决方案2】:

    TL;DR:sentence = column.strip(' \t\n*+_')

    如果您只想从末尾删除字符而不关心 unicode,那么基本字符串 strip() 函数将让您选择要删除的字符。它默认为空格,但你可以输入任何你想要的。

    如果你想在字符串中删除,你会遇到正则表达式,或者,如果使用字节字符串或 Python 2,maketrans

    你也可以看看这个question

    【讨论】:

    • 谢谢,它没有产生预期的结果。我应该提到这需要使用regexp_replace
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2011-03-22
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多