使用python中的正则表达式忽略列表中的字符串

时间:2012-08-07 09:23:40

标签: python list

我从网站上获取一些信息,例如我正在获取一些客户的地址

address = ['Mr Thomas',
 '+(91)-9849633132, 9959455935',
 '+(91)-9849633132',
 '9196358485',
 '8846853128',
 '8-4-236/2']

从上面的列表中我想忽略以+(91) and 9 and 8开头的字符串,这些字符串只是电话号码,所以我使用正则表达式如下

import re


result = [i for i in address if not re.match(r"[98]\B", i)]

结果

['Mr Thomas','+(91)-9849633132, 9959455935','+(91)-9849633132','8-4-236/2']

这是以9 and 8开头的字符串被忽略但我想忽略以+(91)开头的字符串,任何人都可以告诉我如何做到这一点。

3 个答案:

答案 0 :(得分:1)

使用|添加另一个检查+(91) (或)运营商。像这样:

>>> [i for i in address if not re.match(r"[98]\B|\+\(91\)\B", i)]
['Mr Thomas', '8-4-236/2']

请注意,您必须转义+,(和),因为它们是特殊字符。

另外,使用过滤器可能更有效,而不是列表理解:

>>> filter(lambda x: not re.match(r"[98]\B|\+\(91\)\B", x), address)
['Mr Thomas', '8-4-236/2']

虽然我不能确定。

编辑:看起来效率不高。但是,我发现它更像是自我记录,但你可以随意使用它。

答案 1 :(得分:0)

result = [i for i in address if not re.match(r"\+[98]\B", i)]

答案 2 :(得分:0)

这确实有效:

 result = [i for i in s if not re.match(r'[+89][-()+0-9/\s]+',i)]

为什么呢? '\ B'开关在这里是有害的,因为匹配不得出现在字符串的开头。 此外,建议的搜索模式允许数字内的空白区域。