【发布时间】:2013-09-27 10:55:26
【问题描述】:
您好,我有一个格式如下的文本文件:
Sam
John
Peter
Sam
Peter
John
我想使用正则表达式从文件中提取唯一记录,例如:
Sam
John
Peter
请帮帮我。
【问题讨论】:
-
你不需要正则表达式...使用集合
标签: python
您好,我有一个格式如下的文本文件:
Sam
John
Peter
Sam
Peter
John
我想使用正则表达式从文件中提取唯一记录,例如:
Sam
John
Peter
请帮帮我。
【问题讨论】:
标签: python
使用集:
In [1]: name="""
...: Sam
...: John
...: Peter
...: Sam
...: Peter
...: John"""
In [2]: print name
Sam
John
Peter
Sam
Peter
John
In [3]: a=name.split()
In [4]: a
Out[4]: ['Sam', 'John', 'Peter', 'Sam', 'Peter', 'John']
In [5]: set(a)
Out[5]: {'John', 'Peter', 'Sam'}
【讨论】:
别听他们的!
当然这可以在正则表达式中完成。没关系,他们有正确的、可读且简洁的O(1) 解决方案,或者任何正则表达式解决方案都至少是二次时间的,并且与醉汉潦草的可读性差不多。
重要的是它是正则表达式,并且正则表达式必须是好的。给你:
re.findall(r"""(?ms)^([^\n]*)$(?!.*^\1$)""", target_string)
#>>> ['Sam', 'Peter', 'John']
【讨论】:
您似乎想通过用新行拆分输入然后使用set() 删除重复项来创建一个列表。然后,您可以使用list() 将其转换为列表。看起来像下面。 strip() 用于删除换行符。
names = list(set([x.strip() for x in open('names.txt').readlines()]))
【讨论】: