-1

嗨,我有一个格式如下的文本文件:

Sam
John
Peter
Sam 
Peter
John

我想使用正则表达式从文件中提取唯一记录,例如:

Sam
John
Peter

请帮帮我。

4

3 回答 3

6

使用集:

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'}
于 2013-09-27T10:59:00.117 回答
5

不要听他们的!

当然,这可以在 Regex 中完成。没关系,他们有正确O(1)的、可读且简洁的解决方案,或者任何正则表达式解决方案至少是二次时间的,并且与醉汉的潦草书写一样可读。

重要的是它是正则表达式,而正则表达式必须是好的。干得好:

re.findall(r"""(?ms)^([^\n]*)$(?!.*^\1$)""", target_string)
#>>> ['Sam', 'Peter', 'John']
于 2013-09-27T15:40:32.360 回答
4

似乎您想通过新行拆分输入然后使用删除重复项来创建一个列表set()。然后,您可以使用将其转换为列表list()。看起来像下面。strip()用于删除换行符。

names = list(set([x.strip() for x in open('names.txt').readlines()]))
于 2013-09-27T11:02:50.310 回答