繁体   English   中英

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

[英]Python: compare two strings retain difference from one end

初学者在这里,尽管有些相似,但尚未找到答案。

如果我有两个字符串:

s1 = 'abcdefghijk'
s2 = 'abcdefghi'

如何获得'jk'作为输出? 'abcdefghi'必须先匹配,然后我才能得到区别。

接下来的第二个问题(如果我得到第一个问题,我可能可以弄清楚)是s2 = 'cdefghi'并且我仍然希望输出仅为'jk'而不是'ab''jk'

您可以使用find()s1find() s2的第一个索引,即:

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))

您可以使用字符串方法index来找到子字符串的开头,然后添加子字符串的长度以获取要开始的位置,从而从中获得更多的区别。

base = 'abcdefghijk'
sub = 'abcdefghi'

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

extra(base, sub)

如果sub不是子字符串,则将在此处引发ValueError ,在这种情况下,您可以选择执行所需的操作。

编辑:根据您对问题的评论,不返回任何内容-我猜您的意思可能是一个空字符串-请执行以下操作:

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

您是否在此处使用findindex可能取决于您实际想要使用它的目的。

对于第一种情况,如果s1 ='abcdefghijk's2 ='abcdefghi',下面的方法也可以工作。

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

因此,基本上可以将设置逻辑应用于字符串,以提取提到的字符串的重叠部分和非重叠部分。

有关更多信息... https://docs.python.org/2/library/sets.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM