Python删除所有不是字母或数字的东西

我在使用Python正则表达式时遇到了一些麻烦。

删除字符串中所有非字母或数字的字符的好方法是什么?

谢谢!

回答:

[\w] 匹配项(字母数字或下划线)。

[\W] 匹配项(非(字母数字或下划线)),等同于(非字母数字和下划线)

您需要[\W_]删除所有非字母数字。

使用re.sub()时,如果通过匹配[\W_]+而不是一次替换来减少替换次数(昂贵),则效率会大大提高。

现在,您只需要定义字母数字即可:

str 对象,仅ASCII A-Za-z0-9:

    re.sub(r'[\W_]+', '', s)

str 对象,仅区域设置定义的字母数字:

    re.sub(r'[\W_]+', '', s, flags=re.LOCALE)

unicode 对象,所有字母数字:

    re.sub(ur'[\W_]+', u'', s, flags=re.UNICODE)

str对象的示例:

>>> import re, locale

>>> sall = ''.join(chr(i) for i in xrange(256))

>>> len(sall)

256

>>> re.sub('[\W_]+', '', sall)

'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

>>> re.sub('[\W_]+', '', sall, flags=re.LOCALE)

'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

>>> locale.setlocale(locale.LC_ALL, '')

'English_Australia.1252'

>>> re.sub('[\W_]+', '', sall, flags=re.LOCALE)

'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\x83\x8a\x8c\x8e\

x9a\x9c\x9e\x9f\xaa\xb2\xb3\xb5\xb9\xba\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\

xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\

xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\

xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'

# above output wrapped at column 80

Unicode示例:

>>> re.sub(ur'[\W_]+', u'', u'a_b A_Z \x80\xFF \u0404', flags=re.UNICODE)

u'abAZ\xff\u0404'

以上是 Python删除所有不是字母或数字的东西 的全部内容, 来源链接: utcz.com/qa/397581.html

回到顶部