[英]Python: compare two strings retain difference from one end
初学者在这里,尽管有些相似,但尚未找到答案。
如果我有两个字符串:
s1 = 'abcdefghijk'
s2 = 'abcdefghi'
如何获得'jk'
作为输出? 'abcdefghi'
必须先匹配,然后我才能得到区别。
接下来的第二个问题(如果我得到第一个问题,我可能可以弄清楚)是s2 = 'cdefghi'
并且我仍然希望输出仅为'jk'
而不是'ab'
和'jk'
。
您可以使用find()
在s1
中find()
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 ''
您是否在此处使用find
或index
可能取决于您实际想要使用它的目的。
对于第一种情况,如果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.