合并两个重叠的字符串
我正在试图创建一个完整的地址,但我的数据来自以下形式:
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?