合并两个重叠的字符串

我正在试图创建一个完整的地址,但我的数据来自以下形式:

Line 1                     | Line 2                   | Postcode
1, First Street, City, X13
1, First Street             First Street, City          X13 
1                           1, First Street, City, X13  X13

关于如何创建这些数据还有其他一些排列,但我希望能够将所有这些数据合并为一个没有重叠的字符串。 所以我想创建字符串:
1, First Street, City, X13

但不是1, First Street, First Street, City, X13

如何在不重复数据的情况下对它们进行连接或合并? 还有一些像第一行没有信息的顶行的单元格。


如果你有一个纯文本,你可以用n来分割你的文本,以便得到该行并分割行,以获得单独的字段:

>>> s = """1, First Street, City, X13
... 1, First Street             First Street, City,          X13 
... 1                           1, First Street, City, X13  X13"""
>>> 
>>> lines = s.split('n')
>>> 
>>> splitted_lines = [line.split(',') for line in lines]

请注意,作为更Python的方式,你可以使用csv模块通过指定逗号读你的文字,作为分隔符。

import csv
with open('file_name') as f:
    splitted_lines = csv.reader(f,delimiter=',') 

然后,您可以使用以下列表理解来获取每列中的唯一字段:

>>> import re
>>> ' '.join([set([set(re.split(r's{2,}',i)).pop() for i in column]).pop() for column in zip(*splitted_lines)])
'1  First Street  City'

请注意,在这里你可以使用zip()函数得到列,然后用re.split()和正则表达式r's{2,}'拆分项目,这re.split()你的字符串分成2个或更多的空格,然后你可以起诉set()来保存唯一的项目。

注意:如果你关心订单,你可以使用collections.OrderedDict而不是set

>>> from collections import OrderedDict
>>> 
>>> d = OrderedDict()
>>> ' '.join([d.fromkeys([set(re.split('s{2,}',i)).pop() for i in column]).keys()[0] for column in zip(*splitted_lines)])
'1  First Street  City  X13'

如果你不介意丢失标点符号:

from collections import OrderedDict
od = OrderedDict()


from string import punctuation
with open("test.txt") as f:
    next(f)
    print("".join(od.fromkeys(word.strip(punctuation) for line in f    
          for word in line.split())))

1 First Street City X13

如果你有重复的话,你将无法使用这种方法,但根据你的输入,没有办法知道可能的组合是什么,可以禁止第二行实际上始终保持完好,在这种情况下,你只需要拉第二行。

链接地址: http://www.djcxy.com/p/89193.html

上一篇: Merging two strings that overlap

下一篇: Is window.navigator.userAgent really going to be deprecated?