복붙노트

[PYTHON] 대 / 소문자를 구분하지 않음

PYTHON

대 / 소문자를 구분하지 않음

파이썬에서 대소 문자를 구별하지 않는 문자열 대체를하는 가장 쉬운 방법은 무엇입니까?

해결법

  1. ==============================

    1.문자열 유형은 이것을 지원하지 않습니다. re.IGNORECASE 옵션을 사용하는 정규식 하위 메서드를 사용하는 것이 가장 좋습니다.

    문자열 유형은 이것을 지원하지 않습니다. re.IGNORECASE 옵션을 사용하는 정규식 하위 메서드를 사용하는 것이 가장 좋습니다.

    >>> import re
    >>> insensitive_hippo = re.compile(re.escape('hippo'), re.IGNORECASE)
    >>> insensitive_hippo.sub('giraffe', 'I want a hIPpo for my birthday')
    'I want a giraffe for my birthday'
    
  2. ==============================

    2.

    import re
    pattern = re.compile("hello", re.IGNORECASE)
    pattern.sub("bye", "hello HeLLo HELLO")
    # 'bye bye bye'
    
  3. ==============================

    3.한 줄에 :

    한 줄에 :

    import re
    re.sub("(?i)hello","bye", "hello HeLLo HELLO") #'bye bye bye'
    re.sub("(?i)he\.llo","bye", "he.llo He.LLo HE.LLO") #'bye bye bye'
    

    또는 선택적 "flags"인수를 사용하십시오.

    import re
    re.sub("hello", "bye", "hello HeLLo HELLO", flags=re.I) #'bye bye bye'
    re.sub("he\.llo", "bye", "he.llo He.LLo HE.LLO", flags=re.I) #'bye bye bye'
    
  4. ==============================

    4.bFloch의 대답을 계속하면서,이 함수는 하나가 아니라, new를 가진 old의 모든 경우를 대소 문자를 구분하지 않고 변경합니다.

    bFloch의 대답을 계속하면서,이 함수는 하나가 아니라, new를 가진 old의 모든 경우를 대소 문자를 구분하지 않고 변경합니다.

    def ireplace(old, new, text):
        idx = 0
        while idx < len(text):
            index_l = text.lower().find(old.lower(), idx)
            if index_l == -1:
                return text
            text = text[:index_l] + new + text[index_l + len(old):]
            idx = index_l + len(new) 
        return text
    
  5. ==============================

    5.RegularExp는 필요하지 않습니다.

    RegularExp는 필요하지 않습니다.

    def ireplace(old, new, text):
        """ 
        Replace case insensitive
        Raises ValueError if string not found
        """
        index_l = text.lower().index(old.lower())
        return text[:index_l] + new + text[index_l + len(old):] 
    
  6. ==============================

    6.블레어 총리처럼 콘라드는 string.replace가 이것을지지하지 않는다고 말합니다.

    블레어 총리처럼 콘라드는 string.replace가 이것을지지하지 않는다고 말합니다.

    regex re.sub를 사용하지만, 먼저 교체 문자열을 이스케이프해야합니다. re.sub에 대해서는 2.6에서 플래그 옵션이 없으므로 임베디드 수정 자 '(? i)'(또는 RE 객체)를 사용해야합니다 (Blair Conrad의 대답 참조). 또한, 또 다른 함정은 subst가 문자열이 주어지면 대체 텍스트에서 백 슬래시 이스케이프를 처리한다는 것입니다. 이를 피하기 위해 대신 람다를 전달할 수 있습니다.

    다음은 함수입니다.

    import re
    def ireplace(old, repl, text):
        return re.sub('(?i)'+re.escape(old), lambda m: repl, text)
    
    >>> ireplace('hippo?', 'giraffe!?', 'You want a hiPPO?')
    'You want a giraffe!?'
    >>> ireplace(r'[binfolder]', r'C:\Temp\bin', r'[BinFolder]\test.exe')
    'C:\\Temp\\bin\\test.exe'
    
  7. ==============================

    7.전에는 답을 게시 해본 적이 없으며이 스레드는 실제로 오래된 것입니다.하지만 다른 해결책을 생각해 냈습니다. Python 프로그래밍에 익숙하지 않은 Im입니다. 단점이있는 경우, 좋은 학습을 한 후에 지적 해주십시오. )

    전에는 답을 게시 해본 적이 없으며이 스레드는 실제로 오래된 것입니다.하지만 다른 해결책을 생각해 냈습니다. Python 프로그래밍에 익숙하지 않은 Im입니다. 단점이있는 경우, 좋은 학습을 한 후에 지적 해주십시오. )

    i='I want a hIPpo for my birthday'
    key='hippo'
    swp='giraffe'
    
    o=(i.lower().split(key))
    c=0
    p=0
    for w in o:
        o[c]=i[p:p+len(w)]
        p=p+len(key+w)
        c+=1
    print(swp.join(o))
    
  8. ==============================

    8.나는 \ t 이스케이프 시퀀스 (아래로 조금 스크롤)로 변환되는 데, 그래서 re.sub 백 슬래시 이스케이프 된 문자를 이스케이프 시퀀스를 변환 언급했다.

    나는 \ t 이스케이프 시퀀스 (아래로 조금 스크롤)로 변환되는 데, 그래서 re.sub 백 슬래시 이스케이프 된 문자를 이스케이프 시퀀스를 변환 언급했다.

    내가 다음을 쓴 것을 막기 위해서 :

    대소 문자를 구별하지 마십시오.

    import re
        def ireplace(findtxt, replacetxt, data):
            return replacetxt.join(  re.compile(findtxt, flags=re.I).split(data)  )
    

    또한 이스케이프 시퀀스로 변환 된 특별한 의미의 bashslash 문자를 얻는 다른 응답과 같이 이스케이프 문자로 바꾸려면 여기를 찾아서 디코딩하고 문자열을 바꿉니다. 파이썬 3에서는 .decode ( "unicode_escape") # python3과 같은 것을해야 할 수도 있습니다.

    findtxt = findtxt.decode('string_escape') # python2
    replacetxt = replacetxt.decode('string_escape') # python2
    data = ireplace(findtxt, replacetxt, data)
    

    Python 2.7.8에서 테스트되었습니다.

    희망이 도움이됩니다.

  9. from https://stackoverflow.com/questions/919056/case-insensitive-replace by cc-by-sa and MIT license