나는 python difflib 문서를 읽고 있습니다. difflib.differ 출력 따르면이다Python Difflib - PHP Diff 클래스 형식과 같은 diff sequneces를 얻는 방법
는의미 코드 '-' '서열 모두에 공통 라인을'2 시퀀스 독특한 1 '+'행 시퀀스에 고유 라인? '입력 시퀀스에 존재하지 않는 라인
나는 또한이 질문을 읽고있다. Python Difflib - How to Get SDiff Sequences with "Change" Op이 질문에 대한 답변을 Sнаđошƒаӽ 님이 보낼 수 없습니까?
나는 거의 펄 아니면 sdiff 무엇인지 '해달라고하지만이 기능을 조정해야합니다 : 기능 이상 PHP Diff Class
내가하려고했는데 그 값을 반환처럼
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
이되고 UNCHANGE, ADDED 및 DELETED 중 하나입니다.
사례 1 : 삭제 된 4 차의 경우 더 복잡하다 일부 문자
- 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 : '?'라인이 삭제 나는이 코드 건너 뛸
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))
내에서 조정할 방법을 모르는
- The good the bad and the ugly
+ Our ratio is less than 0.75!
선. 나는 새로운 라인이 삽입되지 않았을 때만 (-)을 추가하고 새로운 라인을 삽입하면 (+)를 추가하려고한다.
인용문으로 인용 된 섹션을 인용 부호로 표시하십시오. – simbabque