【问题标题】:Replacing all regular expression matches except a certain character替换除某个字符之外的所有正则表达式匹配项
【发布时间】:2014-03-28 20:55:12
【问题描述】:

我想知道如何替换除某个选定字符之外的所有正则表达式匹配项。

我需要清理数据。数据的一个例子是

`some-really,dirty.data%#$_.`

我想要的样子

some-reallydirtydata_

注意somereally 之间的-。这是我选择的角色,我不想删除。

这是我的代码的 sn-p:

import re

unclean_string = "some-really,dirty.data%#$_."
clean_string = re.sub('\W', '', unclean_string)

print clean_string
>>>"somereallydirtydata_"

我知道\W 会删除除“0 到 9、a 到 z、A 到 Z 和下划线”之外的所有内容。

我想知道如何删除所有这些,以及一个选定的字符(例如-)。

免责声明:对于提出这样一个基本问题,我提前道歉。我是 Python 新手并使用正则表达式。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    你可以使用:

    clean_string = re.sub(r'[^\w-]', '', unclean_string)
    

    [^\w] 等同于\W。所以,如果你在其中添加一个-,你也不会匹配它。

    注意:我还提取了上面的正则表达式字符串,因为这样做是一个好习惯。这可以防止您在转义期间出现意外行为。

    【讨论】:

      【解决方案2】:

      在您的正则表达式中包含连字符:

      clean_string = re.sub('[^-\w]', '', unclean_string)
      

      正则表达式的解释:

      NODE                     EXPLANATION
      --------------------------------------------------------------------------------
        [^-\w]                   any character except: '-', word characters
                                 (a-z, A-Z, 0-9, _)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 2014-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多