【问题标题】:Replace non alphanumeric characters except some exceptions python替换非字母数字字符,除了一些例外python
【发布时间】:2015-01-14 08:41:22
【问题描述】:

在 perl 中,s/[^\w:]//g 将替换所有非字母数字字符除了:

在 python 中我使用re.sub(r'\W+', '',mystring) 除了_下划线之外,它确实删除了所有非字母数字。 有什么办法可以放异常,我不希望替换像 = 和 . 之类的符号。

以前我使用了另一种方法,即使用re.sub('[!@#\'\"$()]', '',mystring` 替换所有不需要的字符) 但是,我无法预测 mystring 中可能出现的所有字符,因此我希望删除除少数之外的所有非字母数字字符。

Google 没有提供适当的答案。最接近的搜索是 python regex split any \W+ with some exceptions,但这对我也没有帮助。

【问题讨论】:

    标签: python regex alphanumeric


    【解决方案1】:

    您可以在否定字符类中指定不需要删除的所有内容。

    re.sub(r'[^\w'+removelist+']', '',mystring)
    

    测试

    >>> import re
    >>> removelist = "=."
    >>> mystring = "asdf1234=.!@#$"
    >>> re.sub(r'[^\w'+removelist+']', '',mystring)
    'asdf1234=.'
    

    这里的removelist 变量是一个字符串,其中包含您需要从删除中排除的所有字符的列表。

    否定字符类是什么意思

    当^ 被移动到字符类中时,它不会充当锚点,因为它会否定字符类。

    即^ 在字符类中说像[^abc] 它否定了字符类的含义。

    例如,[abc] 将匹配 a b 或 c 其中 [^abc] 将不匹配 a b 或 c。这也可以表述为 a b 或 c

    以外的任何内容

    【讨论】:

    • 感谢@nu11p01n73R。我没有在 [] 里面添加删除列表。我给出了类似 '^w.=' 之类的东西,这当然是行不通的。请问r和^的意思,^通常用作“开始”,但这里似乎有不同的含义。
    • @user1977867 是的,当^ 在一个字符类中说像[^abc] 它否定了字符类的含义。即[abc] 将匹配a b 或c 其中[^abc] 将不匹配a b 或c。那是 a b 或 c 以外的任何东西
    • 我能问一下你为什么称 removelist 'remove'list 吗?在我看来,这是您想要保留的字符列表。我只是提到它,因为它让我感到困惑。
    • @ikku100 哦,我在答案中提到了它这里的 removelist 变量是一个字符串,其中包含您需要从删除中排除的所有字符的列表。跨度>
    【解决方案2】:
    re.sub(r'[^a-zA-Z0-9=]', '',mystring)
    

    你可以添加任何你想要的东西,比如_你想保存的任何一个。

    【讨论】:

      【解决方案3】:

      我相信你在perl中描述的方法也可以在python中使用,例如:

      re.sub(r'[^\w=]', '',mystring)
      

      将删除除单词字符和 = 之外的所有内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 2012-09-04
        相关资源
        最近更新 更多