我从网站上获取一些信息,例如我正在获取一些客户的地址
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)
开头的字符串,任何人都可以告诉我如何做到这一点。
答案 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'开关在这里是有害的,因为匹配不得出现在字符串的开头。 此外,建议的搜索模式允许数字内的空白区域。