Python difflib print только соответствует части между двумя строками - PullRequest
0 голосов
/ 28 июня 2018

Я новичок в python, и мне нужна помощь по difflib. Я пытался прочитать документацию, но для меня не легко понять документы.

Я хотел бы сравнить две строки, и я хочу, чтобы на выходе была только часть префикса совпадений между двумя строками (не выводить различия).

Пример:

t1 = "hello my name is Tom" 
t2 = "hello his name is Sawyer"

ожидаемый результат: "привет"

Я попробовал следующие подходы, но вывод не то, что я хочу, потому что он выводит вывод как массив, а также выводит на печать не только часть:

#!/usr/bin/python

import difflib
t1 = "hello my name is Tom"
t2 = "hello his name is Sawyer"
seq = difflib.Differ()
seq = seq.compare(t1,t2)
print list(seq)

другой пример-2:

t1 = "20180628-153020"
t2 = "20180628-173020"

ожидаемая распечатка: "20180628-1" и суффикс "3020", даже если обе строки соответствуют позиции и символам, его следует игнорировать.

Пожалуйста, помогите мне .. спасибо ...

обновление 2018/07/02

Я написал небольшой код, чтобы получить только одинаковую часть префикса между двумя строками (без использования takewhile в качестве 1-го ответа от @Eugene), но я думаю, что 2-й код, написанный @Eugene в ответе, является более коротким и эффективным это мое. вот мой код:

def getprefix(s1, s2):
    pref = ""
    ls1 = list(s1)
    ls2 = list(s2)
    i=0
    while i < len(ls1):
        if ls1[i] not in ls2[i]:
            return pref
        pref += ls1[i]
        i += 1

1 Ответ

0 голосов
/ 28 июня 2018
In [1]: from itertools import takewhile
In [2]: ''.join(a for (a, b) in takewhile(lambda (a, b): a == b, zip(t1, t2)))
Out[2]: '20180628-1'

Здесь мы объединяем две строки вместе и повторяем их, пока их префиксы равны.

Upd. Эквивалентное решение без использования itertools:

result = []
for a, b in zip(t1, t2):
    if a != b:
        break
    result.append(a)
return ''.join(result)
...