2010-08-21 7 views
1

하나의 문자 또는 문자열이 주어졌으며 파이썬을 사용하고 있습니다.유니 코드 대소 문자 변환

유니 코드에서 제안한 표준 (표준 및 특수 대소 문자 매핑)에 따라 특정 문자가 소문자인지 확인하려면 어떻게합니까?

그리고 유니 코드에서 제안한 표준 (표준 및 특수 사례 매핑)에 따라 문자열에 소문자가 하나 이상의 문자가 있는지 어떻게 알 수 있습니까?

답변

5
def haslower(unicodechar): 
    return unicodechar != unicodechar.lower() 

def anylower(unicodestring): 
    return any(haslower(c) for c in unicodestring) 

이는 많은 파이썬 버전으로 사용중인 제대로 작동이 제대로 물론, 유니 코드 표준 당 .lower() 방법을 구현했습니다. 또한, 예를 들어, u'a'과 같이 "소문자가 있어야합니다"라고 생각하지 않는다고 가정합니다 (물론 대문자를 사용합니다 (물론 개 중 하나). 당신이 다른 무언가를 의미하는 경우, 고려

def changescase(uc): 
    return uc != uc.lower() or uc != uc.upper() 

(I 과도한 라인 길이를 ;-) 방지하기 위해 uc의 인수 이름을 변경 한 - 만약 당신이 원하는 내가 "의 측면에서 기능을 이름 하지 추천 소문자로 동일 "하면 코드의 독자/관리자를 혼란스럽게 할 것입니다. -)

+0

.lower (와 .upper)는 악센트 부호가있는 문자에도 작동합니다. –

+0

감사합니다. GAE에서 내 응용 프로그램을 실행하므로 파이썬 2.5.2입니다.나는 다른 질문을했습니다. 당신이 대답하고 싶다면 (다른 사람들도 볼 수 있기를 바랍니다). http://stackoverflow.com/questions/3536397/does-python-version-2-5-2-follow-unicode-standards-for-lower-and-upper-functi – Albert

1

@Albert, 아직 정리하지 않았을 때 대소 문자를 구별하지 못하는 것 같습니다 응답자에게) 당신이 정말로하고 싶은 일.

=== (this question에 대한 내 대답에 코멘트에서) 설명에서 귀하의 이전 시도 ===

@ 존 : 글쎄, 난 사실 내 웹 서비스 API를 만들고있어. 내 webservice는 내 데이터베이스의 특정 레코드에 매핑되는 키를 허용합니다. 키는 대소 문자를 구분하며 키는 모든 유니 코드 문자로 구성 될 수 있습니다. 따라서 모든 입력을 정규화하기 위해 모든 주요 쿼리를 소문자로 변환합니다 (대문자가 동등한 경우). 그 결과 내 사용자가 사용자 정의 할 수있는 레코드 키를 만들 때입니다. toLower() 함수를 사용하여 소문자로 변환 할 수있는 대문자를 사용할 수 없습니다. 그래서 나는 그것을 위해 필터를 만들려고 노력하고 있습니다. 어떤 제안?

=== 내 회신 주석 ===

@Albert : 당신의 키는 대소 문자를 구분, 왜 당신이 그들을 정상화된다 ??? "사용자 정의 할 수있는 레코드 키"는 무엇을 의미합니까 ??? "모든 유니 코드 char"대 "어떤 대문자 문자도 받아 들일 수 없습니다"??? 당신의 질문에 말 그대로 답하십시오 : c.lower()! = c 일 때 문자 c를 받아 들일 수없는 것처럼 보입니다. 이는 key.lower()! = key라면 어떤 키도 받아 들일 수 없다는 것을 의미합니다. 나는 새로운 질문을 시작하고, 당신이하고 싶은 것을 정확하게 설명해야한다고 생각한다.

... 당신은 분명히 새로운 질문을했습니다 (사실 2 명).하지만 당신은 아무것도 설명하지 않았습니다. 이 "새로운"질문은 @Alex Martelli의 대답이 본질적으로 위에 강조 표시된 내 의견과 동일하다는 점에서 매우 새롭습니다.

새 질문과 함께 의 새로운 내용을 시작하고 예를 들어 정확히 설명해야한다고 생각합니다.

+0

좋아. 내가 정확히하려고하는 것을 정리할 것입니다. 감사! – Albert