\d+\??\d+?(, |, and )\d{1,2}[A-Z]?(\.\d{1,2}[A-Z]?)*( ?\[ ?\w+ ?\])*
이 정규식을 사용해 데이터 프로세싱 작업을 하는중인데,
뜬금없이 1982, 1984와 같은 연도 부분까지 파싱이 되어버렸다.
문제가 뭔지 보니 정규식에서 연도까지 잘못 처리할 수 있다는 걸 알게되어
\b\d{1,2}[A-Z]?\b(, |, and )\b\d{1,2}[A-Z]?\b(\.\d{1,2}[A-Z]?\b)*( ?\[ ?\w+ ?\])*
위와 같이 단어 경계 구분을 위해 \b
를 추가해줬다.
\b
의 기능은 아래와 같다.
\\b의 기능
- 단어 경계 :
\b는 공백, 문장 부호, 또는 문자열의 시작과 끝과 같은 위치에서 단어와 비단어(공백, 문장 부호, 숫자와 문자가 아닌 것) 사이의 경계를 의미 예를 들어, \bword\b는 “word”라는 단어가 독립적으로 존재하는지 확인 따라서 “word.” 또는 “word “와 같은 경우에는 매치되지만, “sword”나 “words”와는 매치되지 않음 - 단어의 시작과 끝 :
\b는 단어의 시작(\b 앞에 사용) 또는 끝(\b 뒤에 사용)에서 특정 패턴이 나타나도록 함 예를 들어, \b123\b는 “123”이 단어 경계에서 시작하고 끝나는 경우만 매치됨, 따라서 “123”이 앞뒤로 공백이나 다른 기호로 구분된 경우에만 매치됨
\\b를 사용해야 할 상황
- 독립된 단어를 찾을 때 :
특정 단어 또는 숫자가 다른 단어의 일부가 아니라 독립적으로 존재하는지 확인하고 싶을 때 사용 예를 들어, “apple”을 찾을 때 “pineapple”과 같은 단어를 제외하고 싶다면 \bapple\b를 사용 - 숫자 또는 문자 앞뒤의 경계를 명확히 하고 싶을 때 :
숫자 또는 문자가 다른 숫자나 문자와 연결되지 않은 독립적인 값인지를 확인하고 싶을 때 사용 예를 들어, “2023”이라는 숫자를 찾고 싶지만 “12023”이나 “20234”와 같은 경우를 제외하고 싶다면 \b2023\b를 사용
\\b를 적절히 사용하는 방법
- 단어의 시작과 끝에 위치 :
찾고자 하는 패턴이 단어 경계에 위치해야 할 때, 해당 패턴 앞뒤에 \b를 사용
예: r"\bword\b"는 “word”라는 단어가 독립적으로 존재하는 경우를 찾음 - 숫자 또는 특정 패턴의 경계를 설정 :
숫자나 특정 패턴이 다른 문자와 연결되지 않도록 경계를 설정하려면, 해당 패턴 앞뒤에 \b를 사용
예: r"\b\d{4}\b"는 4자리 숫자가 단어 경계에 위치하는 경우(예: 연도)를 찾음
'Back > Python' 카테고리의 다른 글
[VS Code Python] VS Code에 Python 사용 | pip3로 패키지 설치 (0) | 2024.08.21 |
---|---|
[Mac/Python] 웹 크롤링 준비 | pip로 beautifulsoup4, requests 패키지 설치 | bs4 import 에러 (0) | 2024.08.08 |