2013-09-27 46 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