Я читаю документацию python difflib. В соответствии с выходом difflib.differ является:Python Difflib - Как получить diff sequneces, например, в формате PHP Diff Class
Код Значения «-» линии уникален для последовательности 1 линию «+», уникальных для последовательности 2 «» линии, общей для обоего последовательностей «? «Линия не присутствует в любой входной последовательности
Я также читал этот вопрос на StackOverflow Python Difflib - How to Get SDiff Sequences with "Change" Op, но не быть в состоянии добавить комментарий на Sнаđошƒаӽ» s ответ.
Я не»знаю, что SDiff на языке Perl довольно много, но мне нужно, чтобы настроить эту функцию:
def sdiffer(s1, s2):
differ = difflib.Differ()
diffs = list(differ.compare(s1, s2))
i = 0
sdiffs = []
length = len(diffs)
while i < length:
line = diffs[i][2:]
if diffs[i].startswith(' '):
sdiffs.append(('u', line))
elif diffs[i].startswith('+ '):
sdiffs.append(('+', line))
elif diffs[i].startswith('- '):
if i+1 < length and diffs[i+1].startswith('? '): # then diffs[i+2] starts with ('+ '), obviously
sdiffs.append(('c', line))
i += 3 if i + 3 < length and diffs[i + 3].startswith('? ') else 2
elif diffs[i+1].startswith('+ ') and i+2<length and diffs[i+2].startswith('? '):
sdiffs.append(('c', line))
i += 2
else:
sdiffs.append(('-', line))
i += 1
return sdiffs
быть как PHP Diff Class
выше функции я стараюсь, и возвращает значение UNCHANGE, ADDED и DELETED. DELETED является более сложным с 4-разностными случаев, является:
Случай 1: линия модифицируется вставки некоторые символы
- The good bad
+ The good the bad
? ++++
Случай 2: Линия модифицирована путем удаления некоторых персонажей
- The good the bad
? ----
+ The good bad
Дело 3: Строка изменяется путем удаления и вставки и/или замены некоторых символов:
- The good the bad and ugly
? ^^ ----
+ The g00d bad and the ugly
? ^^ ++++
Случай 4: '?' Строка удалена
- The good the bad and the ugly
+ Our ratio is less than 0.75!
Я не знаю, как настроить в пределах этого кода
elif diffs[i].startswith('- '):
if i+1 < length and diffs[i+1].startswith('? '): # then diffs[i+2] starts with ('+ '), obviously
sdiffs.append(('c', line))
i += 3 if i + 3 < length and diffs[i + 3].startswith('? ') else 2
elif diffs[i+1].startswith('+ ') and i+2<length and diffs[i+2].startswith('? '):
sdiffs.append(('c', line))
i += 2
else:
sdiffs.append(('-', line))
, чтобы пропустить линия. Я просто хочу добавить (-) только в том случае, если новая строка не вставлена и не добавляется с (+) при вызове новой строки.
Просьба отметить цитируемые разделы в вашем вопросе в виде цитат. – simbabque