2015-09-10 2 views
1

Начинающий здесь, и не нашел ответа на этот вопрос, хотя некоторые из них похожи.Python: сравнить две строки сохранить разницу с одного конца

Если у меня есть две строки:

s1 = 'abcdefghijk' 
s2 = 'abcdefghi' 

Как получить 'jk' как выход? 'abcdefghi' должен сначала соответствовать, а затем я получаю разницу на конце.

Следующая после этого (что я могу быть в состоянии выяснить, если я получаю первый вопрос ответили) является то, что если s2 = 'cdefghi' и я все еще хочу выход быть только 'jk' не 'ab' и 'jk'.

+3

Я не думаю, что ваша проблема полностью определена. То, что должно быть возвращено, если в строки есть не общие части, например. '' abc "и' "xyz" '? что ты уже испробовал? – Blckknght

+0

'abc' и 'xyz' ничего не вернут. только если что-то соответствует, я хочу посмотреть, что находится в конце s1, который не находится на s2. В случае, когда я смотрю s2, либо закончится в том же месте, что и s1, но никогда не будет длиннее и продолжит в конце, чем s1 – user5323164

ответ

2

Вы можете найти первый индекс s2 в 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)) 
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 не подстрока, и вы можете делать то, что вы хотите в этом случае.

Edit: на основе ваших комментариев на ваш вопрос, не вернуть ничего - я предполагаю, что вы имеете в виду, может быть пустой строкой - сделай:

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

использовать ли вы find или index здесь, вероятно, зависит от того, что на самом деле он хочет использовать это.

0

Для первого случая, case s1 = 'abcdefghijk' s2 = 'abcdefghi', ниже будет работать тоже.

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

Поэтому в основном набор логики может быть применен на струнах, чтобы извлечь перекрывающиеся и неперекрывающиеся части указанных строк.

Для получения дополнительной информации ... https://docs.python.org/2/library/sets.html

Но для 2-го случая, @ user3760780 предложение, как представляется, наилучшим образом подходит.