【问题标题】:Regular expression and removing parentheses正则表达式和删除括号
【发布时间】:2020-08-10 01:59:10
【问题描述】:

我有一个dataframe

name
(John)
(Lily)
(Eddy)
Wang
Lisa

dataframe 格式不正确,我需要删除括号。 返回的df 应该是:

name
John
Lily
Eddy
Wang 
Lisa

我的代码是:

merge_df['name'] = merge_df['name'].replace('()','')

但是返回的df 并没有给我想要的结果。有谁知道如何修复这段代码?

【问题讨论】:

  • @MZ 不用在() 里面逃跑[] 他们在那里松散有特殊意义

标签: python regex pandas dataframe


【解决方案1】:

.replace 默认情况下会查找精确匹配。您可以明确指定要使用正则表达式,如下所示。

merge_df['name'].replace(regex="[()]", value="")

【讨论】:

    【解决方案2】:

    根据official documentreplace函数的第一个参数是要替换的字符串。 因此,some_str.replace('()','') 表示替换字符串中的所有 (),但未找到,因此您的替换函数返回相同的字符串。

    有三种处理方式。

    1. 使用多个替换函数。

      由于一次只能替换一种子字符串,我们可以使用它两次来实现我们的目的。

      your_str = your_str.replace('(','').replace(')','')
      
    2. 使用正则表达式库re.sub()

      re.sub() (doc) 函数功能更强大,可以在一次调用中指定要替换的不同子字符串。

      对我来说,我更喜欢这个解决方案,因为它更灵活、更强大。

      import re
      your_str = re.sub(r'[\)\(]', '', your_str)
      
    3. 使用str.strip() (doc)

      str.strip() 函数只会删除字符串末尾的字符,您也可以指定要删除的多个字符。 因此,在这种情况下,它很有用。

      your_str = your_str.strip('()')
      

    【讨论】:

    • 这是一个很好的答案。不过,我建议颠倒偏好:从简单开始(例如stripreplace),只有在您知道很快就会存在需求时才使用更高级的工具(例如,正则表达式)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2018-08-25
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多