2010-04-23 3 views
1

:파이썬 re.IGNORECASE되는 동적 나는 이런 식으로 뭔가 할 싶습니다

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',re.I) 

을 그리고 re.I가 동적 일 수있다, 그래서 즉석에서 대소 문자를 구분하거나 구분하지 않는 비교를 할 수 있습니다. 이것은 작동하지만 문서화되지 않았습니다 :

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',1) 

민감하게 설정하려면. 이 일을하는 Pythonic 방법이 있습니까? 나의 가장 좋은 생각은 지금까지입니다 :

if case_sensitive: 
    regex_senstive = 1 
else: 
    regex_sensitive = re.I 
re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',regex_sensitive) 

답변

2

이 기본 동작을 얻으려면, 당신은 플래그 매개 변수에 0를 사용할 수 있습니다. 1은 문서화되지 않은 re.TEMPLATE 플래그를 설정하므로 역 추적을 사용하지 않아야합니다.

그래서 당신은 사용할 수 있습니다

flags = 0 if case_sensitive else re.I 
re.findall(r'pattern', s, flags) 

플래그 매개 변수는 실제로 플래그 (re.I, re.M 등)의 조합으로, 하나의 비트에 의해 표현되는 각각의 플래그. 비트가 설정되지 않으면 (값 0) 기본 동작이 사용됩니다.

+0

기본 동작은 대/소문자를 구분합니까? –

+0

예, 그렇습니다. --- – interjay

관련 문제