删除不包含与 Python 匹配的正则表达式的单元格/行

Posted

技术标签:

【中文标题】删除不包含与 Python 匹配的正则表达式的单元格/行【英文标题】:Removing cells/rows that don't contain regex match with Python 【发布时间】:2014-01-25 20:06:25 【问题描述】:

我有一个包含据称电话号码的单列的 csv。但是,有几个单元格包含错误的数字、字母和符号等。我只想保留单元格中正好包含十个数字的每一行,并删除所有其他行。

我还有一个文件,在名称列的每个单元格中间(在名字之后)包含一个奇怪的非 ascii 字符。有没有一种简单的方法可以丢弃文件中的每个非 ascii 字符?我只是想摆脱它,尽管用空格替换它也可以。

我已经在我的 csvs 上运行的代码中导入了 pandas,所以如果有帮助,它是可用的。

【问题讨论】:

只需使用过滤器:new_li=[e for e in old_old_li if re.search(regex, e)] 【参考方案1】:

首先,让我们生成一些随机电话号码——大多数是好的,一些是坏的:

import random

li=[]
for i in range(50):
    li.append('--'.format(random.randrange(1,999), random.randrange(1,999), random.randrange(100,9999))) 

然后过滤那些:

import re
new_li=[e for e in li if re.match(r'\d\d\d-\d\d\d-\d\d\d\d', e)]

print new_li
print set(li)-set(new_li)    # show the ones removed...

如果您想要使用 Pandas,您可以使用相同的正则表达式并将 .apply 用于 DataFrame:

df=pd.DataFrame(li, columns=['Phone'])
pat=re.compile(r'^\d3-\d3-\d4$')
print df
print df[df['Phone'].apply(lambda s: bool(pat.search(s)))]

【讨论】:

完美!我喜欢人们真正向我展示答案背后的过程,以便我学习。

以上是关于删除不包含与 Python 匹配的正则表达式的单元格/行的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer-正则表达式匹配(Python)

Python 中的正则表达式。不匹配

从数组中删除与正则表达式不匹配的元素

删除元素的正则表达式与特定前缀不匹配

如果正则表达式不包含特定单词,如何匹配它?

什么正则表达式将匹配文本,不包括 HTML 标记中的内容?