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

时间:2017-01-24 18:54:00

标签: python regex replace

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

this.driverServiceProcess.StartInfo.LoadUserProfile = true;

我试图只抓取数字,连字符和+符号。基本上删除所有lst = ['\xa0\xa0+11-9188882266\xa0\xa0+01-9736475634 ','\xa0\xa0+11-9177772266\xa0\xa0+01-9736475234']

我认为\xa0是正确的方法。尝试过但失败了:

Regex
  

追踪(最近一次通话):    文件"",第1行,in    文件" C:\ Python34 \ lib \ re.py",第160行,匹配      return _compile(pattern,flags).match(string)    文件" C:\ Python34 \ lib \ re.py",第282行,在_compile中      p,loc = _cache [type(pattern),pattern,flags]   TypeError:不可用类型:' list'

我用mRegex = (['+0-9-']) lst = re.match(mRegex,lst) 再尝试了几次,然后切换到regex

replace

它对h.replace(r"\xa0","")没有任何作用。保持不变。

当我执行lst时,我得到的len(lst[0])非常奇怪。

在a:

33

输出不显示for i in lst[0]: print(i)

我在这里完全糊涂了。

1 个答案:

答案 0 :(得分:6)

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

第二,当你替换你使用 raw 前缀时,你不应该使用它,因为它按字面意思处理\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