2013-09-27 43 views
-2

您好我有以下格式的文本文件:Python的独特线条

Sam 
John 
Peter 
Sam 
Peter 
John 

我想提取使用正则表达式从文件,如独特的记录:

Sam 
John 
Peter 

请帮我出。

+3

你不需要正则表达式...使用的一组 –

+0

可能重复[获取唯一值从Python的list(http://stackoverflow.com/questions/12897374/获得唯一值,从-A-列表中的Python) – tripleee

+0

或许http://stackoverflow.com/questions/1215208/how-might-i-remove-duplicate-lines-from-a-file – tripleee

回答

6

使用set:

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'} 
+0

感谢为答案..但我想要在Python中使用正则表达式相同的输出 – Prashant

+4

@Prashant你知道什么正则表达式是什么?这不是他们可以解决的问题。 – l4mpi

+0

@ l4mpi你的意思是“这不是他们应该解决的问题”。他们可以解决这个问题。 – Veedrac

4

好像要使用set()由新线分割的输入,然后删除重复创建列表。您可以使用list()将其转换为列表。看起来像下面。 strip()用于删除换行符。

names = list(set([x.strip() for x in open('names.txt').readlines()])) 
4

不要听他们!

当然这可以在正则表达式中完成。不要介意他们有正确的,可读和简洁的解决方案,或者任何正则表达式解决方案至少是二次方的,并且与酒鬼的潦草书写一样可读。

重要的是,它的正则表达式,和正则表达式必须是好的。在这里你去:

re.findall(r"""(?ms)^([^\n]*)$(?!.*^\1$)""", target_string) 
#>>> ['Sam', 'Peter', 'John'] 
+0

+1失败者 – wim