Python 如何删除'\xe2&x27;从列表中

Python 如何删除'\xe2&x27;从列表中,python,regex,Python,Regex,我是python新手,在我的项目中使用它来使用nltk。对从网页获得的原始数据进行word标记后,我得到了一个包含“\xe2”、““\xe3”、““\x98”等的列表。但是我不需要这些,我想删除它们 我只是试了一下 if '\x' in a 及 它给我一个错误,说无效\x转义 但是当我尝试正则表达式时 re.search('^\\x',a) 我明白了 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 打印重新搜索('^\\x',a) 文件“C:\Python26\lib\re.py”,第

我是python新手,在我的项目中使用它来使用nltk。对从网页获得的原始数据进行word标记后,我得到了一个包含“\xe2”、““\xe3”、““\x98”等的列表。但是我不需要这些,我想删除它们

我只是试了一下

if '\x' in a

它给我一个错误,说无效\x转义

但是当我尝试正则表达式时

re.search('^\\x',a)
我明白了

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
打印重新搜索('^\\x',a)
文件“C:\Python26\lib\re.py”,第142行,搜索中
返回编译(模式、标志)。搜索(字符串)
文件“C:\Python26\lib\re.py”,第245行,在编译中
raise错误,v#表达式无效
错误:假转义:'\\x'
即使重新搜索('^\\x',a)也无法识别它

我对此感到困惑,甚至谷歌搜索也没有帮助(我可能遗漏了一些东西)。请给出从列表中删除这些字符串的简单方法,以及上面的错误


提前谢谢

'\xe2'
是一个字符,
\x
是一个转义序列,后跟一个十六进制数,用于逐字指定字节。
这意味着您必须指定整个表达式:

>>> s = '\xe2hello'
>>> print s
'\xe2hello'
>>> s.replace('\xe2', '')
'hello'

更多信息可以在中找到。

您可以使用
unicode(a'ascii',ignore')
一次删除字符串中的所有非ascii字符。

这有助于理解字符串文字和字符串之间的区别

字符串文本是源代码中的一个字符序列。当Python解释器进行解析和编译时,它会生成一个字符串,这是内存中的一个字符序列

例如,字符串literal
a
生成字符串
a

字符串文字可以采用多种形式。所有这些都产生相同的字符串
a

"a"
'a'
r"a"
"""a"""
r'''a'''
源代码传统上仅为ASCII码,但我们希望它包含可以生成ASCII码以外字符的字符串文字。为此,可以使用转义。例如,字符串文字
“\xe2”
生成一个字符串,其中一个字符的整数值为E2十六进制或226十进制

这解释了关于
“\x”
是无效转义的错误:解析器希望您指定字符的十六进制值

要检测字符串是否在某个范围内包含任何字符,可以使用正则表达式和字符类,指定不需要的字符的上下限:

if re.search(r"[\x90-\xff]", a):

让我们往后退一步,想一想这件事

您正在使用nltk(自然语言工具包)解析(大概)自然语言

您的
'\xe2'
很可能用扬抑符(–)表示U+00E2拉丁文小写字母A。
您的
“\xe3”
很可能用波浪号(ã)表示U+00E3拉丁文小写字母A


在我看来,它们就像自然语言字母。您确定不需要它们吗?

我看到其他答案很好地解释了您对
'\x'
的困惑,但尽管建议您可能不想完全删除非ASCII字符,但除了删除之外,还没有提供其他规范化的具体方法

如果您希望获得一些“相当接近的ASCII字符”(例如,从字母中去掉重音符号,但保留基础字母,&c),可能会有所帮助——仅使用标准Python库的公认答案中的代码是:

import unicodedata

def strip_accents(s):
   return ''.join(c for c in unicodedata.normalize('NFD', s)
                  if unicodedata.category(c) != 'Mn')
当然,您需要将此函数应用于标题中提到的列表中的每个字符串项,例如

cleanedlist = [strip_accents(s) for s in mylist]

如果
mylist
中的所有项目都是字符串。

如果只想输入此模式并避免错误

您可以尝试在\和x之间插入一个+,如下所示:

re.search('\+x[0123456789abcdef]*',a)

嗨,谢谢你的回复!实际上,我正试图从网页中提取数字,所以我不需要拉丁字符。@pythonisgr8:(1)您正在使用nltk提取数字??(2) “拉丁语”并不意味着“口音”;注释中几乎所有的字符都是“拉丁”(3)如果您只提取数字,那么
'abracadabra'
中的
'a'
字母是否带有重音并不重要;您不需要删除您不想要的字符来提取您想要的字符。也许你应该问另一个问题,描述你正在尝试做什么。嗨,谢谢你的回答!这真是太好了!!虽然正则表达式更适合我的项目。我喜欢这个解决方案,但是你知道Python 3的单行替代品吗?谢谢你的回复!虽然我目前不需要非ASCII字符,因为我正在提取数字及其上下文,但您的答案在将来可能会有所帮助!!
cleanedlist = [strip_accents(s) for s in mylist]
re.search('\+x[0123456789abcdef]*',a)