본문 바로가기

개발/정규표현식

[정규 표현식] 문자 하나 찾기

반응형

 

글을 읽기 전에 아래 문제를 먼저 풀어보자 :)

 

문제

1. 정규 표현식에서 마침표(.)의 의미에 대해서 설명하여라.

더보기

모든 문자를 의미 한다. 줄바꿈 문자를 제외한 모든 문자와 일치한다.

2. 정규 표현식에서 역슬래시(\)의 의미에 대해서 설명하여라.

더보기

문자들이 문자 그대로 해석되게 하는 용도로 사용된다.(이스케이프)

3. 정규표현식에서는 패턴이 아닌, 그냥 문자열("abcde")은 사용할 수 없다. (O / X)

더보기

정답은 (X) 이다. 정규 표현식은 패턴 뿐만 아니라, 그냥 문자열도 사용 가능 하고, 이를 정적 텍스트(static text) 라 한다.

 

키워드

  • 정적 텍스트(static text)
  • 마침표(.)
  • 역슬래시(\)

 

1. 문자를 그대로 사용

단순하게, 그냥 문자를 찾고 싶다면? 그냥 문자 그대로 써도 된다.

예를들어서, 아래 문자열에서 Depaysement 라는 단어를 찾고 싶다면? 파이썬 코드로는 아래와 같이 확인 할 수 있다.

Hello World! Depaysement :)
In [25]: import re

In [26]: sentence = "Hello World! Depaysement :)"

In [27]: result = re.search("Depaysement", sentence) # 단순히 문자열 "Depaysement" 를 찾는다

In [28]: print(result.group())
Depaysement

In [29]: if result:
    ...:     print("해당 문자열이 존재 함")
    ...:
해당 문자열이 존재 함

복수개 문자를 찾을 때는 아래와 같이 할 수 있다.

Hello World! Depaysement Depaysement :)
In [47]: result = re.findall("Depaysement", sentence)

In [48]: print(result)
['Depaysement', 'Depaysement']

 

 

2. 모든 문자 찾기

위에서는 특정 단어를 찾기 위한 정적 텍스트(static text)를 이용했다. ctrl + f 단축키를 이용해서 특정 문자열을 찾는 것과 같은 방법이다.

그렇다면, 모든 문자열을 일치하도록 하고 싶다면 어떤 것을 쓰면 될까? 책에서는 마침표(.) 에 대해서 설명한다.

마침표(.) 문자는 아무 문자 하나와 일치한다.

예를 들어서, 파일 명과 상관 없이 확장자가 .py 인 파일을 찾고 싶을 때, 아래와 같이 사용할 수 있다.

In [49]: import re

In [50]: python_files = ["a.py", "b.py", "c.py", "d.py"]

In [51]: python_files_string = '\n'.join(python_files)

In [52]: result = re.findall(".\.py", python_files_string)

In [53]: print(result)
['a.py', 'b.py', 'c.py', 'd.py']

 

위 코드에서 ".\.py" 형태의 코드가 사용 되었는데, 여기서 역슬래시(\) 는 메타 문자 라고 한다.

메타문자는 일반적으로 문자 그대로 사용되지 않고 특별한 의미를 지니는 문자를 말한다 위 예시에서는 마침표의 의미가 문자열의 전체를 의미하는 동시에, 확장자에서 사용되는 마침표의 의미로도 사용되고 있는데, 나의 의도는 확장에서 사용되는 마침표는 정규표현식에서 사용되는 의미가 아닌, 문자열에 사용되는 마침표를 의도 하였기 때문에, 앞에 역슬래시(\)를 써주었다.

 

정리

  • 정규 표현식은 패턴 혹은 문자들로 이루어진 문자열이고, 그냥 문자("abc") 혹은 메타 문자(특별한 의미를 지닌 특수문자 역슬래시, 마침표 등) 일 수 도 있다.
  • 마침표(.)는 모든 문자와 일치한다.
  • 역슬래시(\)는 문자들이 문자 그대로 해석되게 한다

 

 

참조

greeksharifa.github.io/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D(re)/2018/07/20/regex-usage-01-basic/

 

Python, Machine & Deep Learning

Python, Machine Learning & Deep Learning

greeksharifa.github.io

 

반응형

'개발 > 정규표현식' 카테고리의 다른 글

[정규 표현식] 문자 집합으로 찾기  (0) 2021.01.05
[정규 표현식] 정규 표현식 소개  (0) 2021.01.05