>백엔드 개발 >파이썬 튜토리얼 >Python의 문자열에서 ANSI 이스케이프 시퀀스를 제거하는 방법은 무엇입니까?

Python의 문자열에서 ANSI 이스케이프 시퀀스를 제거하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-28 04:38:11355검색

How to Remove ANSI Escape Sequences from a String in Python?

Python의 문자열에서 ANSI 이스케이프 시퀀스 제거

문제:

SSH 명령의 색상 강조에 사용되는 것과 같은 ANSI 이스케이프 시퀀스가 ​​포함된 문자열입니다. 이러한 시퀀스는 프로그램 기능을 방해하므로 기본 텍스트를 얻으려면 이를 제거해야 합니다.

해결책:

프로그램에서 ANSI 이스케이프 시퀀스를 제거하는 효과적인 방법 중 하나 문자열은 정규식을 사용하는 것입니다. Python의 re 모듈은 일치하는 시퀀스를 빈 문자열로 대체할 수 있는 sub() 메서드를 제공합니다.

import re

ansi_escape = re.compile(r'\x1B(?:[@-Z\-_]|\[[0-?]*[ -/]*[@-~])')
cleaned_string = ansi_escape.sub('', original_string)

이 정규식은 모든 7비트 ANSI C1 이스케이프 시퀀스와 일치합니다. 이스케이프 문자(ESC)로 시작하고 그 뒤에 제어 문자가 오는 2바이트 시퀀스 또는 제어 문자를 나타내는 단일 8비트 바이트를 캡처합니다. 이러한 일치 항목을 빈 문자열로 대체함으로써 sub() 메서드는 ANSI 시퀀스를 효과적으로 제거합니다.

압축 버전:

cleaned_string = re.sub(r'\x1B(?:[@-Z\-_]|\[[0-?]*[ -/]*[@-~])', '', original_string)

예:

다음과 같이 주어진다 문자열:

ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m

위의 정규 표현식을 사용하여 정리된 문자열을 얻습니다.

ls\r\nexamplefile.zip\r\n

추가 참고 사항:

  • 정규식은 모든 7비트 ANSI C1 이스케이프 시퀀스를 포함하지만 8비트 C1 이스케이프 시퀀스는 포함하지 않습니다.
  • 8비트 코드를 처리해야 하는 경우 약간 더 복잡한 정규식이 필요합니다.
  • ANSI 이스케이프 코드에 대한 자세한 내용은 Wikipedia의 ANSI 이스케이프 코드 개요를 참조하세요. 또는 ECMA-48 표준.

위 내용은 Python의 문자열에서 ANSI 이스케이프 시퀀스를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.