这似乎是一个非常明显的错误,我现在已经尝试解决了近一个小时.:(
lst = ['\xa0\xa0+11-9188882266\xa0\xa0+01-9736475634 ','\xa0\xa0+11-9177772266\xa0\xa0+01-9736475234']
我试图只抓取数字,连字符和+符号.基本上删除所有\xa0
.
我认为这Regex
是正确的方法.尝试过但失败了:
mRegex = (['+0-9-']) lst = re.match(mRegex,lst)
回溯(最近一次调用最后一次):文件"",第1行,在文件"C:\ Python34\lib\re.py",第160行,在匹配返回_compile(模式,标志).match(string)文件"C :\ Python34\lib\re.py",第282行,_compile p,loc = _cache [type(pattern),pattern,flags] TypeError:unhashable type:'list'
我再给它几次尝试regex
然后切换到replace
:
h.replace(r"\xa0","")
它没有做任何事情lst
.保持完全相同.
当我做一个len(lst[0])
我得到33
的非常奇怪.
在一个:
for i in lst[0]: print(i)
输出没有显示\xa0
.
我在这里完全糊涂了.
首先,您不能在列表中应用替换/正则表达式.您必须为每个字符串应用它们,并使用列表推导来重建清理列表.
第二,当你替换你使用原始前缀时,你不应该使用它,因为它按\x
字面意思对待,而不是你想要的.
我会做:
lst = [x.replace("\xa0","") for x in lst]
结果是:
['+11-9188882266+01-9736475634 ', '+11-9177772266+01-9736475234']
和BTW:mRegex = (['+0-9-'])
不起作用,因为你基本上定义了1个字符串的列表.你可能意味着mRegex = '([0-9\-+])'
正则表达式的解决方案是:
lst = [re.sub(r"[^\d+\-]","",x) for x in lst]
(删除与char类不匹配的字符,并且\d
(大致)等效于0-9
)