Regular Expressions: A Practical Tutorial — txt1.ai

March 2026 · 17 min read · 3,971 words · Last Updated: March 31, 2026Advanced

💡 Key Takeaways

  • What Regular Expressions Actually Are (And Why You Should Care)
  • The Building Blocks: Characters, Quantifiers, and Character Classes
  • Capturing Groups and Backreferences: Extracting What You Need
  • Lookaheads and Lookbehinds: Advanced Pattern Matching

나는 50,000개의 고객 이메일 주소 데이터셋을 수동으로 청소하는 데 여섯 시간을 보낸 날을 아직도 기억한다. 2012년, 나는 중간 규모의 전자상거래 회사에서 주니어 데이터 분석가로 일하고 있었고, 정규 표현식에 대해 몰랐다. 나는 복사하고 붙여넣고, 찾고, 바꾸고, 스프레드시트에서 저주를 퍼부으며 시간을 보내고 있었다. 내 매니저가 네 번째 시간쯤 지나가다가 내가 무엇을 하고 있는지 물어봤다. 내가 설명하자 그녀는 친절하지 않게 웃으며 "정규 표현식이 있으면 약 30초 만에 할 수 있다는 걸 알고 있지?"라고 말했다.

💡 주요 요점

  • 정규 표현식이란 무엇이며 왜 중요할까?
  • 구성 요소: 문자, 수량자, 문자 클래스
  • 캡처 그룹과 백레퍼런스: 필요한 정보 추출하기
  • 앞을 내다보는 패턴과 뒤를 내다보는 패턴: 고급 패턴 매칭

그 순간은 내 경력을 바꿨다. 12년 후, 헬스케어, 금융 및 기술 회사에서 수십억 개의 기록을 처리한 선임 데이터 엔지니어로서, 나는 정규 표현식이 데이터 작업에서 가장 과소평가된 기술이라고 자신 있게 말할 수 있다. 그것들은 섹시하지 않다. 기계 학습이나 블록체인처럼 헤드라인을 장식하지 않는다. 하지만 그것은 당신이 오후를 정신 없음 수작업에 소비하는 것과 실제 문제를 해결하는 것의 차이다.

이 튜토리얼의 목적은 잘 알려지지 않은 구문을 암기하거나 하룻밤 사이에 정규 표현식 마법사가 되는 것이 아니다. 매주 수시간을 절약할 수 있는 실용적인 패턴을 이해하는 것이다. 내가 가장 자주 사용하는 정규 표현식을 정확히 보여주고, 그것들이 왜 작동하는지 설명하며, 내가 작업한 프로젝트에서 어떻게 도움을 주었는지 실제 시나리오를 제공할 것이다. 끝에는 텍스트 처리, 데이터 정리 및 유효성 검사에서 당신을 훨씬 더 효율적으로 만들어 줄 도구 키트를 갖게 될 것이다.

정규 표현식이란 무엇이며 왜 중요할까?

정규 표현식—줄여서 정규식—은 텍스트를 설명하는 패턴이다. 그것들을 당신의 텍스트 편집기에서의 간단한 "찾기" 기능보다 훨씬 더 강력한 검색 언어로 생각하라. "[email protected]"과 같은 정확한 일치를 검색하는 대신 "이메일 주소처럼 보이는 모든 것"과 같은 패턴을 검색할 수 있다.

이것이 실제적으로 중요한 이유는 다음과 같다: 현재 내 역할에서 나는 수백만 개의 항목이 포함된 로그 파일과 정기적으로 작업한다. 지난달에는 트래픽 패턴을 분석하기 위해 2.3GB 서버 로그에서 모든 IP 주소를 추출할 필요가 있었다. 정규 표현식이 없었다면, 아마도 50-100줄의 코드를 작성해야 했을 것이고, 엣지 케이스를 조심스럽게 다루어야 했을 것이다. 하지만 정규 표현식으로 한 줄이면 되었다: \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b. 실행 시간: 4.7초.

비즈니스에 미치는 영향은 현실적이다. 한 금융 서비스 회사의 동료는 그들이 거래 설명을 수동으로 검토하여 비용을 분류하고 있다고 말했다—하루 약 200건의 거래, 대략 45분이 걸린다. 나는 그들에게 87%의 분류 작업을 자동화하는 세 가지 정규 표현식을 작성하도록 도왔다. 이는 하루에 39분을 절약해 주었고, 한 사람의 경우 연간 약 140시간에 해당한다. 이를 팀에 걸쳐 곱하면 진짜 금액이 된다.

정규 표현식은 거의 모든 프로그래밍 언어와 당신이 이미 사용하는 많은 도구에서 작동한다. Python, JavaScript, Java, C#, Ruby, PHP—모두 정규식 지원을 갖고 있다. 심지어 Excel도 최신 기능을 통해 제한된 정규식 기능을 제공한다. VS Code, Sublime Text, Vim과 같은 텍스트 편집기는 찾기 및 바꾸기에 정규식을 사용한다. grep, sed, awk와 같은 명령줄 도구는 정규식에 기반하여 만들어졌다. 한 번 배우면 모든 곳에서 사용할 수 있다.

학습 곡선은 존재하지만, 나는 거짓말하지 않겠다. 정규식 구문은 처음 봤을 때 위협적으로 보일 수 있다. 그러나 내가 수십 명의 주니어 엔지니어들을 교육하면서 배운 것은: 모든 것을 마스터할 필요는 없다. 실용적인 정규식 작업의 약 80%는 사용 가능한 기능 중에서 아마도 20%를 사용한다. 이러한 핵심 패턴에 집중하면 현실 세계의 대부분의 시나리오를 처리할 수 있다.

구성 요소: 문자, 수량자, 문자 클래스

기본 사항부터 시작해 보자. 정규식에서 대부분의 문자는 문자 그대로 자신과 일치한다. 패턴 cat은 텍스트에서 "cat"이라는 단어와 일치한다. 충분히 간단하다. 그러나 정규식은 패턴과 일치하는 특수 문자를 사용할 때 강력해진다.

"정규 표현식은 수동 데이터 청소에 여섯 시간을 소비하는 것과 매번 완벽하게 수행하는 패턴을 쓰는 데 30초를 소비하는 것의 차이이다."

마침표(.)는 첫 번째 특수 문자다. 이는 줄바꿈을 제외한 모든 단일 문자와 일치한다. 그래서 c.t는 "cat", "cot", "cut", 심지어 "c9t"와도 일치한다. 나는 데이터의 구조는 알고 있지만 정확한 내용은 모를 때 이를 자주 사용한다. 예를 들어 "AB-1234-XY"와 같은 패턴을 따르는 제품 코드를 파싱할 때 ..-.{4}-..를 사용하여 구조가 일치하는 코드를 찾을 수 있다.

수량자는 정규식에 특정 항목이 얼마나 자주 나타나야 하는지를 알려준다. 별표(*)는 "0회 이상", 더하기 기호(+)는 "1회 이상", 물음표(?)는 "0회 또는 1회"를 의미한다. 실용적인 예를 들어보자: 나는 여러 형식으로 들어오는 전화번호를 정리할 필요가 있었는데—일부는 괄호가 있었고, 일부는 하이픈이 있었고, 일부는 공백이 있었다. 패턴 \(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}는 모든 변형을 처리했다. 물음표 덕분에 괄호와 구분자가 선택 사항이 되었다.

문자 클래스는 특정 문자 집합과 일치시킬 수 있다. 대괄호는 클래스를 정의한다: [aeiou]는 모음을 모두 일치시킨다. 범위를 사용할 수도 있다: [a-z]는 모든 소문자 문자와, [0-9]는 모든 숫자와 일치한다. 나는 알파벳 숫자 유효성을 위해 [A-Za-z0-9]를 자주 사용한다. 또한, 숫자에 대해 \d, 단어 문자를 위해 \w, 공백을 위해 \s와 같은 약어 클래스를 사용할 수 있다.

작년의 실제 시나리오를 소개하자: 나는 사람들이 나이를 매우 불규칙한 형식으로 입력한 설문 응답을 처리하고 있었으며—"25", "25 years", "25 years old", "twenty-five" 등. 숫자 항목의 경우, \d{1,3}\s*(years?|yrs?)? 대부분의 변형을 포착했다. \d{1,3}는 1자리에서 3자리 숫자와 일치하고, \s*는 선택적 공백을 일치시켰으며, 파이프(|)가 있는 괄호는 "year", "years", "yr" 또는 "yrs"와 일치하는 선택적 그룹을 생성했다.

앵커는 정확한 매칭에 필수적이다. 캐럿(^)은 행의 시작과 일치하고, 달러 기호($)는 끝과 일치한다. 앵커가 없으면 \d{3}는 "abc123def"에서 "123"의 위치를 스캔하게 된다. 그러나 앵커를 사용하면 ^\d{3}$는 전체 행이 정확히 세 자리 숫자일 경우에만 일치한다. 나는 사용자 입력을 검증할 때 이를 힘든 방식으로 배웠다—앵커 없이 내 "세 자리 코드" 검증기는 "abc123def456"를 수용했기 때문이다.

캡처 그룹과 백레퍼런스: 필요한 정보 추출하기

정규식의 괄호는 단순히 대안을 그룹화하는 것 이상의 역할을 한다—일치한 텍스트를 나중에 사용하기 위해 캡처한다. 이것이 정규식이 "패턴 찾기"에서 "데이터 추출 및 변형하기"로 발전하는 지점이다. 나는 내 정규식 작업의 아마도 60%에서 캡처 그룹을 사용한다.

접근 방법 소요 시간 오류율 확장성
수동 찾기/바꾸기 시간에서 며칠 높음 (사람의 피로) 낮음 (확장되지 않음)
기본 문자열 방법 분에서 시간 중간 (제한된 패턴) 보통 (간단한 사례만 해당)
정규 표현식 초에서 분 낮음 (일관된 논리) 우수 (수백만 건 처리 가능)
맞춤 파서 스크립트 작성하는 데 소요된 시간 낮음 (잘 테스트된 경우) 좋음 (그러나 유지보수 부담)

가령 "2024-03-15" 형식의 날짜를 가지고 있고 이를 "03/15/2024"로 변환해야 한다고 하자. 패턴 (\d{4})-(\d{2})-(\d{2})는 세 개의 캡처 그룹을 생성한다. 대부분의 프로그래밍 언어에서, 이러한 캡처를 참조할 수 있다: 그룹 1은 연도, 그룹 2는 월, 그룹 3은 일이다. 그런 다음 그들을 재배열할 수 있다: $2/$3/$1은 새로운 형식을 제공한다.

나는 최근에 이 기술을 사용하여 리포맷해야 할 18,000개의 제품 설명을 처리했다. 원래 형식은 "ProductName (SKU: 12345) - $99.99"였고 우리는 "12345 | ProductName | $99.99"가 필요했다. 패턴 (.+?) \(SKU: (\d+)\) - (\$[\d.]+)는 세 가지 구성 요소를 캡처했으며, 대체 $2 | $1 | $3는 그것들을 재배열했다. 총 시간: 정규식을 작성하고 테스트하는 데 약 90초, 모든 기록을 처리하는 데 2.3초였다.

비캡처 그룹은 선택이나 수량자에 대해 그룹화할 필요가 있지만 텍스트를 캡처하고 싶지 않을 때 유용하다. (...) 대신 (?:...)를 사용하라. 예를 들어, (?:Mr|Ms|Mrs)\. ([A-Z][a-z]+)는 직함과 일치하지만 이름만 캡처한다. 이렇게 하면 캡처 그룹 번호가 합리적으로 유지되고, 대규모 데이터셋에서 성능이 약간 향상될 수 있다.

백레퍼런스는 패턴에서 이전에 캡처된 동일한 텍스트를 일치시킬 수 있게 해준다. 구문은 <

T

Written by the Txt1.ai Team

Our editorial team specializes in writing, grammar, and language technology. We research, test, and write in-depth guides to help you work smarter with the right tools.

Share This Article

Twitter LinkedIn Reddit HN

Related Tools

YAML to JSON Converter — Free, Instant, Validated How to Decode JWT Tokens — Free Guide JavaScript Formatter — Free Online

Related Articles

Paraphrasing vs Plagiarism: Where to Draw the Line - TXT1.ai Content Rewriting Without Plagiarism Git Workflow for Small Teams (Keep It Simple)

Put this into practice

Try Our Free Tools →

🔧 Explore More Tools

Minify JsTranslatorChatgpt Coding AlternativeHex ConverterHow To Format JsonJson To Python

📬 Stay Updated

Get notified about new tools and features. No spam.