python

时间:2016-03-13 04:00:48

标签: python regex python-2.7 io

我正在使用python 2.X并且我正在从文件中加载文本,这里是文本中的一行

  

Odio¿Mañanapensarporque RT luego pasa lo que pasa Marzo♡♡♡

我发现这个正则表达式[^ \ x30- \ xFF]与我想要的字符完全匹配(使用在线正则表达式工具),但是当我在我的代码中使用它时:

filtered_comments = re.sub("[^\x30-\xFF]", " ", all_comments)

它与相同的字符不匹配;你可以试试http://pythex.org 所以在这篇文章中我想匹配♡♡♡并离开ñ和¿ ....任何想法?

2 个答案:

答案 0 :(得分:2)

请尝试以下脚本,请参阅第一行的#coding=utf-8。有关详细信息,请参阅PEP-0263

# coding=utf-8
import re

comments = u"Odio ¿Mañana pensar porque RT luego pasa lo que pasa Marzo ♡♡♡"

rx = re.compile(u"[\u2661]+")

# If you want to remove non-ASCII characters, as you mentioned in comments,
# uncomment following regex. 
# Downside is it will remove all accented characters too.
#
# rx = re.compile(u"[^\x00-\x7F]+")

filtered_comments = re.sub(rx, " ", comments)

print filtered_comments

会打印

Odio ¿Mañana pensar porque RT luego pasa lo que pasa Marzo 

答案 1 :(得分:1)

all_comments typestr的{​​{1}}是?如果类型为unicode且字符打印正确,则正则表达式应该有效。

如果您的字符串属于unicode类型,则需要使用正确的编码对其进行编码。假设您的编码是UTF-8,这将起作用:

str

需要注意的另一件事是:filtered_comments = re.sub("[^\x30-\xFF]", " ", all_comments.decode('utf-8')) 匹配^\x30-\xFF!以及其他一些低于#的符号。也许你想要\x30,因为^\x20-\xFF是空间,它几乎是最低的典型ASCII字符?