문제

TV 에피소드의 파일 이름(예: show.name.s01e02.avi)을 구문 분석하고, www.thetvdb.com API에서 에피소드 이름을 가져와서 자동으로 더 좋은 이름으로 이름을 바꾸는 스크립트가 있습니다(Show Name - [01x02) ].avi)

유니코드 표시 이름이 있는 파일에 스크립트를 사용해 보기 전까지는 스크립트가 잘 작동합니다. (내가 가지고 있는 모든 파일이 영어이기 때문에 실제로는 생각해 본 적이 없는 일입니다. 따라서 거의 대부분이 이 안에 속합니다. [a-zA-Z0-9'\-])

정규식이 악센트 문자 및 유사 문자와 일치하도록 하려면 어떻게 해야 합니까?현재 정규식의 구성 섹션은 다음과 같습니다.

config['valid_filename_chars'] = """0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@£$%^&*()_+=-[]{}"'.,<>`~? """
config['valid_filename_chars_regex'] = re.escape(config['valid_filename_chars'])

config['name_parse'] = [
    # foo_[s01]_[e01]
    re.compile('''^([%s]+?)[ \._\-]\[[Ss]([0-9]+?)\]_\[[Ee]([0-9]+?)\]?[^\\/]*$'''% (config['valid_filename_chars_regex'])),
    # foo.1x09*
    re.compile('''^([%s]+?)[ \._\-]\[?([0-9]+)x([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),
    # foo.s01.e01, foo.s01_e01
    re.compile('''^([%s]+?)[ \._\-][Ss]([0-9]+)[\.\- ]?[Ee]([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),
    # foo.103*
    re.compile('''^([%s]+)[ \._\-]([0-9]{1})([0-9]{2})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),
    # foo.0103*
    re.compile('''^([%s]+)[ \._\-]([0-9]{2})([0-9]{2,3})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),
]
도움이 되었습니까?

해결책

다음의 하위 범위를 사용하세요. [\u0000-\uFFFF] 당신이 원하는 것을 위해.

다음을 사용할 수도 있습니다. re.UNICODE 컴파일 플래그. 문서 만약에 그렇게 말해 UNICODE 설정되어 있으며, \w 문자와 일치합니다 [0-9_] 게다가 유니코드 문자 속성 데이터베이스에서 영숫자로 분류된 모든 것.

또한보십시오 http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-05/2560.html.

다른 팁

Python의 re 모듈은 \p{Letter} 또는 \X를 지원하지 않습니다.그러나, 그 PyPI의 새로운 정규식 구현 하다.

Jeffrey Friedl의 정규 표현식 마스터링(훌륭한 책)에서는 문자로 간주되는 유니코드 항목과 일치하는 \p{Letter}를 사용할 수 있다고 언급되어 있습니다.

\X는 일부 언어에서 일반적인 단어 문자로 사용 가능한 것으로 보입니다. 이를 통해 차지하는 바이트 수에 관계없이 단일 문자를 일치시킬 수 있습니다.유용할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top