programing

re.compile을 사용하지 않고 대소문자를 구분하지 않는 정규 표현식입니까?

sourcetip 2023. 1. 10. 21:39
반응형

re.compile을 사용하지 않고 대소문자를 구분하지 않는 정규 표현식입니까?

Python에서는 대소문자를 구분하지 않는 정규 표현을 컴파일 할 수 있습니다.re.compile:

>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>> 
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>

똑같이 할 수 있는 방법이 있을까요?re.compilePerl과 같은 것을 찾을 수 없습니다.i서픽스(예:m/test/i를 참조해 주세요.

통과하다re.IGNORECASE에게flagsparam of , , 또는 :

re.search('test', 'TeSt', re.IGNORECASE)
re.match('test', 'TeSt', re.IGNORECASE)
re.sub('test', 'xxxx', 'Testing', flags=re.IGNORECASE)

IGNORECASE 플래그(Python 2.7.3에서 테스트됨) 없이 검색/일치를 사용하여 대소문자를 구분하지 않는 검색을 수행할 수도 있습니다.

re.search(r'(?i)test', 'TeSt').group()    ## returns 'TeSt'
re.match(r'(?i)test', 'TeSt').group()     ## returns 'TeSt'

대소문자를 구분하지 않는 표식,(?i)는 regex 패턴에 직접 통합할 수 있습니다.

>>> import re
>>> s = 'This is one Test, another TEST, and another test.'
>>> re.findall('(?i)test', s)
['Test', 'TEST', 'test']

패턴 컴파일 중에 대소문자를 구분하지 않도록 정의할 수도 있습니다.

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE)

수입품

import re

런타임 처리 시:

RE_TEST = r'test'
if re.match(RE_TEST, 'TeSt', re.IGNORECASE):

를 사용하지 않는 것에 주의해 주세요.re.compile낭비입니다.위의 일치 방식이 호출될 때마다 정규 표현이 컴파일됩니다.이는 다른 프로그래밍 언어에서도 잘못된 관행입니다.이하가 베스트 프랙티스입니다.

앱 초기화 시:

self.RE_TEST = re.compile('test', re.IGNORECASE)

런타임 처리 시:

if self.RE_TEST.match('TeSt'):

대소문자를 구분하지 않는 작업을 수행하려면 supply re를 사용하십시오.무시하다

>>> import re
>>> test = 'UPPER TEXT, lower text, Mixed Text'
>>> re.findall('text', test, flags=re.IGNORECASE)
['TEXT', 'text', 'Text']

대소문자와 일치하는 텍스트를 대체하려면...

>>> def matchcase(word):
        def replace(m):
            text = m.group()
            if text.isupper():
                return word.upper()
            elif text.islower():
                return word.lower()
            elif text[0].isupper():
                return word.capitalize()
            else:
                return word
        return replace

>>> re.sub('text', matchcase('word'), test, flags=re.IGNORECASE)
'UPPER WORD, lower word, Mixed Word'

대소문자를 구분하지 않는 정규 표현(Regex):코드를 추가하는 방법에는 다음 두 가지가 있습니다.

  1. flags=re.IGNORECASE

    Regx3GList = re.search("(WCDMA:)((\d*)(,?))*", txt, **re.IGNORECASE**)
    
  2. 대소문자를 구분하지 않는 마커(?i)

    Regx3GList = re.search("**(?i)**(WCDMA:)((\d*)(,?))*", txt)
    
#'re.IGNORECASE' for case insensitive results short form re.I
#'re.match' returns the first match located from the start of the string. 
#'re.search' returns location of the where the match is found 
#'re.compile' creates a regex object that can be used for multiple matches

 >>> s = r'TeSt'   
 >>> print (re.match(s, r'test123', re.I))
 <_sre.SRE_Match object; span=(0, 4), match='test'>
 # OR
 >>> pattern = re.compile(s, re.I)
 >>> print(pattern.match(r'test123'))
 <_sre.SRE_Match object; span=(0, 4), match='test'>

이전 str의 스타일을 유지한 채 교체하고 싶은 경우.가능하다.

예: "TEST asdasd TEST asd" 문자열을 강조 표시합니다.

sentence = "test asdasd TEST asd tEst asdasd"
result = re.sub(
  '(test)', 
  r'<b>\1</b>',  # \1 here indicates first matching group.
  sentence, 
  flags=re.IGNORECASE)

테스트 asdasd TEST asd

언급URL : https://stackoverflow.com/questions/500864/case-insensitive-regular-expression-without-re-compile

반응형