Python:比较两个字符串保留一端的差异

时间:2015-09-10 22:26:16

标签: python string compare substring

初学者在这里,并没有找到这个问题的答案,虽然有些相似。

如果我有两个字符串:

s1 = 'abcdefghijk'
s2 = 'abcdefghi'

如何将'jk'作为输出? 'abcdefghi'必须首先匹配,然后我会在最后获得差异。

在此之后的下一个(我可能能够弄清楚,如果我得到第一个问题的答案)是s2 = 'cdefghi'并且我仍然希望输出仅'jk'而不是{{1} }和'ab'

3 个答案:

答案 0 :(得分:2)

您可以在s1 find()中找到def after(s1, s2): index = s1.find(s2) # return None if s2 is not part of s1 # or if there are no characters behind s2 in s1 if index != -1 and index + len(s2) < len(s1): return s1[index + len(s2):] else: return None s1 = "abcdefghijk" s2 = "cdefghij" print(after(s1, s2)) 的第一个索引,即:{/ p>

osascript

答案 1 :(得分:0)

您可以使用字符串方法index来查找子字符串的开头,然后添加子字符串的长度以获得您希望从中获取额外差异的位置。

base = 'abcdefghijk'
sub = 'abcdefghi'

def extra(base, sub):
    start = base.index(sub)
    end = start + len(sub)
    return base[end:]

extra(base, sub)

如果ValueError不是子字符串,则会在此处抛出sub,您可以选择在这种情况下执行您想要的操作。

编辑:根据你对你的问题的评论,什么也不返回 - 我猜你的意思是可能是一个空字符串 - 做:

def diff(base, sub):
    try:
        start = base.index(sub)
        end = start + len(sub)
        return base[end:]
    except ValueError:
        return ''

此处是否使用findindex可能取决于您实际想要使用此内容。

答案 2 :(得分:0)

对于第一种情况,案例s1 ='abcdefghijk's2 ='abcdefghi',以下内容也适用。

>>> set(s1) - set(s2)
{'j', 'k'}
>>> ''.join( set(s1) - set(s2))
'jk'

所以基本上可以在字符串上应用set逻辑来提取上述字符串的重叠和非重叠部分。

了解更多信息...... https://docs.python.org/2/library/sets.html

但是对于第二种情况,@ user3760780建议似乎是最合适的。