솔루션 아이디어
가장 먼저 떠오르는 것은 Python의 정규 표현식을 사용하여 불법 문자를 일치시킨 다음 불법 레코드를 찾는 것입니다. 그러나 이상은 언제나 충만하지만 현실은 잔혹하다. 구현 과정에서 문자 인코딩과 Python의 내부 문자열 표현에 대한 지식이 부족하다는 사실을 발견했습니다. 이 기간 동안 나는 많은 함정을 겪었고, 결국에는 여전히 모호한 부분이 있었지만 마침내 전반적으로 명확한 이해를 얻었습니다. 앞으로 같은 장소에 빠지지 않도록 여기에 경험을 기록하세요.
다음 테스트 환경은 ArcGIS 10.3에 포함된 Python 2.7.8 환경입니다. 다른 Python 환경도 적용된다는 보장은 없습니다.
파이썬 정규식
파이썬의 일반 함수는 내장된 re 함수 라이브러리에서 제공하는데, 주로 3가지 함수를 사용합니다. re.compile()
은 재사용 가능한 정규식을 제공하며 match()
및 search()
함수는 일치하는 결과를 반환합니다. 둘의 차이점은 match()
는 지정된 위치부터 일치를 시작하고 search()
는 지정된 위치에서 뒤로 검색합니다. 일치하는 문자열을 찾을 때까지. 예를 들어, 다음 코드에서 match_result
는 첫 번째 문자 f부터 일치를 시작하고 일치에 실패하면 null 값을 반환합니다. search_result
은 일치하는 첫 번째 문자 a를 찾을 때까지 f에서 역방향으로 검색한 다음 그룹을 사용합니다. () 함수 출력 일치 결과는 문자 a입니다.
import re pattern = re.compile('[abc]') match_result = pattern.match('fabc') if match_result: print match_result.group() search_result = pattern.search('fabc') if search_result: print search_result.group()
위 구현에서는 먼저 패턴을 컴파일한 다음 일치해야 합니다. 실제로 re.match(pattern, string)
함수를 직접 사용하여 동일한 기능을 구현할 수 있습니다. 그러나 직접 매칭 방식은 먼저 컴파일한 후 매칭하는 것만큼 유연하지 않다. 우선, 동일한 패턴으로 많은 양의 데이터를 매칭하면 매번 내부 컴파일이 필요하다는 뜻이다. 또한 성능 손실이 발생하며 re.match()
기능은 일치를 시작할 위치를 지정할 수 있는 pattern.match()
만큼 강력하지 않습니다.
인코딩 문제
파이썬 정규식의 기본 기능을 이해한 후에 남은 것은 희귀 단어와 불법 문자를 일치시키는 적합한 정규식을 찾는 것뿐입니다. 잘못된 문자는 다음 패턴을 사용하여 매우 간단하게 일치시킬 수 있습니다.
pattern = re.compile(r'[~!@#$%^&* ]')그런데 희귀한 캐릭터들의 매칭이 정말 의외였습니다. 첫 번째는 희귀 단어의 정의입니다. 어떤 단어가 희귀하다고 간주되나요? 프로젝트 매니저와 협의한 결과, GB2312 이외의 캐릭터는 희귀 캐릭터로 판단되었습니다. 다음 질문은 GB2312 문자를 일치시키는 방법입니다.
쿼리 결과 GB2312의 범위는
이고, 한자 영역의 범위는 [xA1-xF7][xA1-xFE]
입니다. 따라서 희귀 단어 매칭을 추가한 후의 표현은 다음과 같습니다. [xB0-xF7][xA1-xFE]
pattern = re.compile(r'[~!@#$%^&* ]|[^\xA1-\xF7][^\xA1-\xFE]')문제는 순조롭게 해결된 것 같은데, 아직도 너무 단순하고 너무 순진하네요. 심사할 문자열은 모두 레이어 파일에서 읽혀지기 때문에 arcpy는 읽은 문자를 신중하게 유니코드 형식으로 인코딩합니다. 따라서 유니코드에서 GB2312 문자셋의 인코딩 범위를 알아내야 합니다. 그러나 실제로는 유니코드에서 GB2312 문자 집합의 분포가 연속적이지 않으며 정규식을 사용하여 이 범위를 표현하는 것은 매우 복잡해야 합니다. 희귀한 단어를 매칭하기 위해 정규 표현식을 사용한다는 아이디어는 막다른 골목에 도달한 것 같습니다.
솔루션
제공된 문자열이 유니코드 형식이므로 GB2312로 변환한 후 일치시킬 수 있나요? 실제로 유니코드 문자 집합이 GB2312 문자 집합보다 훨씬 크기 때문에 불가능하므로는 항상 달성될 수 있지만 반대로 GB2312 => unicode
는 반드시 성공하지 못할 수도 있습니다. unicode => GB2312
문자열 변환이 실패했다고 가정하면 이는 GB2312 문자 집합에 속하지 않는다는 의미입니까? 그래서 unicode => GB2312
함수를 사용하여 문자열 변환을 시도하고 UnicodeEncodeError 예외를 포착하여 희귀 단어를 식별했습니다. unicode_string.encode('GB2312')
최종 코드는 다음과 같습니다.
import re def is_rare_name(string): pattern = re.compile(u"[~!@#$%^&* ]") match = pattern.search(string) if match: return True try: string.encode("gb2312") except UnicodeEncodeError: return True return False
요약
위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 궁금한 점이 있으시면 메시지를 남겨주세요.
Tomergelistsinpython, youcanusethe operator, extendmethod, listcomprehension, oritertools.chain, 각각은 각각의 지위를 불러 일으킨다

Python 3에서는 다양한 방법을 통해 두 개의 목록을 연결할 수 있습니다. 1) 작은 목록에 적합하지만 큰 목록에는 비효율적입니다. 2) 메모리 효율이 높지만 원래 목록을 수정하는 큰 목록에 적합한 확장 방법을 사용합니다. 3) 원래 목록을 수정하지 않고 여러 목록을 병합하는 데 적합한 * 운영자 사용; 4) 메모리 효율이 높은 대형 데이터 세트에 적합한 itertools.chain을 사용하십시오.

join () 메소드를 사용하는 것은 Python의 목록에서 문자열을 연결하는 가장 효율적인 방법입니다. 1) join () 메소드를 사용하여 효율적이고 읽기 쉽습니다. 2)주기는 큰 목록에 비효율적으로 운영자를 사용합니다. 3) List Comprehension과 Join ()의 조합은 변환이 필요한 시나리오에 적합합니다. 4) READE () 방법은 다른 유형의 감소에 적합하지만 문자열 연결에 비효율적입니다. 완전한 문장은 끝납니다.

pythonexecutionissprocessoftransformingpythoncodeintoExecutableInstructions.1) the -interreadsTheCode, ConvertingItintoByTecode, thethepythonVirtualMachine (pvm)을 실행합니다

Python의 주요 특징은 다음과 같습니다. 1. 구문은 간결하고 이해하기 쉽고 초보자에게 적합합니다. 2. 개발 속도 향상, 동적 유형 시스템; 3. 여러 작업을 지원하는 풍부한 표준 라이브러리; 4. 광범위한 지원을 제공하는 강력한 지역 사회와 생태계; 5. 스크립팅 및 빠른 프로토 타이핑에 적합한 해석; 6. 다양한 프로그래밍 스타일에 적합한 다중-파라 디그 지원.

Python은 해석 된 언어이지만 편집 프로세스도 포함됩니다. 1) 파이썬 코드는 먼저 바이트 코드로 컴파일됩니다. 2) 바이트 코드는 Python Virtual Machine에 의해 해석되고 실행됩니다. 3)이 하이브리드 메커니즘은 파이썬이 유연하고 효율적이지만 완전히 편집 된 언어만큼 빠르지는 않습니다.

USEAFORLOOPHENTERATINGOVERASERASERASPECIFICNUMBEROFTIMES; USEAWHILLOOPWHENTINUTIMONDITINISMET.FORLOOPSAREIDEALFORKNOWNSEDINGENCENCENS, WHILEWHILELOOPSSUITSITUATIONS WITHERMINGEDERITERATIONS.

Pythonloopscanleadtoerrors likeinfiniteloops, modifyinglistsdizeration, off-by-by-byerrors, zero-indexingissues, andnestedloopineficiencies.toavoidthese : 1) aing'i


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는