글을 읽기 전에 아래 문제를 먼저 풀어보자 :)
문제
1. 정규 표현식에서 대괄호([])의 의미에 대해서 설명하여라.
2. 정규 표현식에서 하이픈(-)의 의미에 대해서 설명하여라.
3. 정규 표현식에서 캐럿(-)의 의미에 대해서 설명하여라.
4. 다음 문자열에서, 위의 1,2,3 번을 활용하여서, 맨 앞글자가 대문자 인 것을 제외 시켜보아라
Kwor.py
a1cw.py
ka1e.py
Ou23.py
In [82]: import re
In [83]: example_list = ["Kwor.py", "a1cw.py", "ka1e.py", "Ou23.py"]
In [84]: example_string = '\n'.join(example_list)
In [85]: result = re.findall('[^A-Z][0-9a-z][0-9a-z][0-9a-z]\.py', example_string)
In [86]: print(result)
['a1cw.py', 'ka1e.py']
키워드
- 대괄호([])
- 하이픈(-)
- 캐럿(^)
1. 여러 문자 중 하나와 일치시키기
아래와 같이 파이썬 파일이 주어 질 때, 맨앞글자가 n or s 이면서, 두번째 글자는 a 인 파일을 찾고 싶다면 어떻게 해야할까?
na1.py
sa2.py
ca1.py
abcde.py
In [10]: import re
In [11]: python_files = ["na1.py", "sa2.py", "ca1.py", "abcde.py"]
In [12]: python_files_string = '\n'.join(python_files)
In [13]: result = re.findall('[ns]a.\.py', python_files_string)
In [14]: print(result)
['na1.py', 'sa2.py']
정답은 '[ns]a.\.py' 이와 같이 써준다. 대괄호([])는 문자 집합을 표현하는데 사용된다. 대괄호 사이에 정의된 문자 중 하나가 일치하게 된다.
예를 들어서, [abcde] 가 있다면, a or b or c or d or e 라고 볼 수 있다.
이 문자 집합(대괄호) 는 아래와 같은 경우에 사용된다.
1. 대소문자를 구별하지 않고 검색하거나
2. 검색할 부분의 특정 영역만 대소문자를 구별하지 않을 때
예제는 다음과 같다.
In [19]: sentences = 'The phrase "regular expression" is oftenabbreviated as RegEx or regex.'
In [20]: result = re.findall('[Rr]eg[Ee]x', sentences)
In [21]: print(result)
['RegEx', 'regex']
2. 문자 집합 범위 사용하기
알파벳 소문자 전 범위에 해당하는 집합을 만들고 싶다면 어떻게 하면 될까?
1. [abcdefg...xyz] <-- 1개씩 다적어준다.
2. [a-z] <-- 범위로 표현해준다.
위와 같이 일일이 집합 요소를 다적어주기 힘들다면, 2번과 같이 범위로도 표현이 가능하다. 여기서 사용되는 하이픈(-) 은 대괄호 안에서만 메타문자의 역할을 한다.
3. '제외하고' 찾기
제외하고 싶은 것이 있다면, 캐럿(^)을 사용해 준다. - exclude 의 역할
아래와 같은 파일이 주어지고, 여기서 억지로.. abc.py 를 추출하고 싶다면?
na1.py
sa2.py
ca1.py
abc.py
us3.py
In [32]: import re
In [42]: python_files = ["na1.py", "sa2.py", "ca1.py", "abc.py", "us3.py"]
In [43]: python_files_string = '\n'.join(python_files)
In [44]: result = re.findall('[nscau].[^0-9]\.py', python_files_string)
In [45]: print(result)
['abc.py']
이렇게 써볼 수 있을 것 같다
[nscau]. <-- 여기 까지는 모든 조건이 만족하지만, 결정적으로 [^0-9]에서 다른 조건들이 모두 숫자를 포함하기 때문에 전부 걸러진다.
여기서 [^0-9] 는 집합 내에 있는 0-9 범위의 숫자는 제외하겠다는 뜻이다.
'개발 > 정규표현식' 카테고리의 다른 글
[정규 표현식] 문자 하나 찾기 (0) | 2021.01.05 |
---|---|
[정규 표현식] 정규 표현식 소개 (0) | 2021.01.05 |