如何将一个字符串添加到另一个字符串并删除重叠的部分?

时间:2018-09-29 14:42:35

标签: python string merge overlapping

如何将一个字符串添加到另一个字符串中,如果该字符串是双精度字符串,则如何删除中间的一部分?

我真的不知道该怎么解释,但这就是我想要做的:

让我们说

string1 = "abcde"

string2 = "cdefg"

我如何创建一个字符串为string1 + string2但仅包含“ cde”部分的变量?

我正在寻找类似的东西

string3 = merge(string1, string2)

这会使string3为“ abcdefg”,而不是“ abcdecdefg”

我在Google上找不到它,所以这就是我在这里问的原因。

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:2)

您可以先检查是否存在重叠,然后仅附加不重叠的部分:

# Find overlap if there is any
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Concatenate strings:
string3 = string1 + (string2 if k is None else string2[k:])

或更简单的是,先将k设置为零:

# Find overlap if there is any
k = 0
for i in range(1, len(string2)):
    if string1.endswith(string2[:i]):
        k = i

# Simply concatenate them
string3 = string1 + string2[k:]

答案 1 :(得分:1)

我们可以查找s2s1的第一个字符的每次出现,并测试此事件s1的其余部分是否是s2的开始。我们需要从s1的开始到结尾都这样做,以确保获得最大可能的重叠。

import re

def fusion(s1, s2):
    for m in re.finditer(s2[0], s1):
        if s2.startswith(s1[m.start():]):
            return s1[:m.start()] + s2
    # no overlap found
    return s1 + s2


string1 = "abede"
string2 = "edefg" # overlap: 'ede'

print(fusion(string1, string2))
# abedefg

答案 2 :(得分:0)

这可以简单地用python set()来实现。.

>>> string1 = "abcde"
>>> string2 = "cdefg"
>>> string3 = string1 + string2
>>> print (''.join(sorted(set(string3))))
abcdefg
  

说明:set()删除重复的元素,进行sorted()排序,然后join()将所有元素合并在一起。