如何在Python中使用正则表达式执行此操作?

时间:2010-04-06 23:35:16

标签: python regex url

def symbolsReplaceDashes(text):

我想用连字符替换所有空格和符号。因为我想在URL中使用它。

3 个答案:

答案 0 :(得分:5)

import re
text = "this isn't alphanumeric"
result = re.sub(r'\W','-',text) # result will be "this-isn-t-alphanumeric"

\W类是\w类的反转,它由字母数字字符和下划线([a-zA-Z0-9_])组成。因此,用短划线替换任何与\W不匹配的字符将为您留下一个仅包含字母数字,下划线和短划线的字符串,适用于URL。

答案 1 :(得分:1)

此响应不使用正则表达式,但也应该有效,可以更好地控制要过滤的符号类型。它使用unicodedata模块通过检查字符的类别来删除所有符号。

import unicodedata

# See http://www.dpawson.co.uk/xsl/rev2/UnicodeCategories.html for character categories
replace = ('Sc', 'Sk', 'Sm', 'So', 'Zs')
def symbolsReplaceDashes(text):
    L = []
    for char in text:
        if unicodedata.category(unicode(char)) in replace:
            L.append('-')
        else: L.append(char)
    return ''.join(L)

如果范围超出基本的ASCII字母数字字符,您可能需要使用类似urllib.quote(output.encode('utf-8'))的内容来编码字符。

答案 2 :(得分:1)

如果要转义要用于网址的字符串,请使用urllib.quote()urllib.quote_plus(),而不是正则表达式。对于更复杂的查询,您可能希望使用urllib.urlencode()构建网址。您可以使用urllib.unquote()urllib.unquote_plus()来反转报价。