替换除特定字符之外的所有正则表达式匹配项

时间:2014-03-28 12:31:43

标签: python regex

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

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

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

我希望看起来像

some-reallydirtydata_

请注意-some之间的really。这是我选择的角色,我喜欢删除。

以下是我的代码片段:

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新手并使用正则表达式。

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

[^\w]相当于\W。因此,如果您在其中添加-,则也不会与之匹配。

注意:我还在上面编写了正则表达式字符串,因为它是一个很好的做法。这可以防止您在转义期间可能出现的意外行为。

答案 1 :(得分:0)

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

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

正则表达式的解释:

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