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.compile
Perl과 같은 것을 찾을 수 없습니다.i
서픽스(예:m/test/i
를 참조해 주세요.
통과하다re.IGNORECASE
에게flags
param 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):코드를 추가하는 방법에는 다음 두 가지가 있습니다.
flags=re.IGNORECASE
Regx3GList = re.search("(WCDMA:)((\d*)(,?))*", txt, **re.IGNORECASE**)
대소문자를 구분하지 않는 마커
(?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
'programing' 카테고리의 다른 글
Double.parseDouble(null)과 Integer.parseInt(null)가 다른 예외를 발생시키는 이유는 무엇입니까? (0) | 2023.01.10 |
---|---|
Javascript - 두 날짜 사이의 날짜 배열 가져오기 (0) | 2023.01.10 |
클래스 내의 함수를 호출하려면 어떻게 해야 합니까? (0) | 2023.01.10 |
spring-boot-starter-web을 사용하여 "허용 가능한 표현을 찾을 수 없습니다" (0) | 2023.01.10 |
dict.copy() 이해 - 얕은가 깊은가? (0) | 2023.01.10 |