当前位置:  开发笔记 > 编程语言 > 正文

如何使用正则表达式或替换清理列表?

如何解决《如何使用正则表达式或替换清理列表?》经验,为你挑选了1个好方法。

这似乎是一个非常明显的错误,我现在已经尝试解决了近一个小时.:(

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.

我在这里完全糊涂了.



1> Jean-Françoi..:

首先,您不能在列表中应用替换/正则表达式.您必须为每个字符串应用它们,并使用列表推导来重建清理列表.

第二,当你替换你使用原始前缀时,你不应该使用它,因为它按\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)

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有