2024. 7. 12. 18:51ㆍVB.NET/왕초보
VB.NET에는 예전에 없던 아주 강력한 기능이 많이 생겼는데 그중 하나가 정규 표현식이다. 정규 표현식은 텍스트를 검색하고 조작할때 사용할 수 있는 아주 강력한 기능을 제공하는데, 오늘은 이 정규표현식을 이용해서 문자열에서 특정 형식의 문자열을 찾아서 반환하는 함수를 만들어보려고 한다.
이 함수는 고객 응대 게시판과 같이 일반 고객들이 직접 입력하는 내용에서 내가 원하는 패턴의 문자열을 뽑아내는 등의 기능을 사용할 때 아주 유용하게 사용할 수 있다.
예를 들어서, 자동차 부품을 판매하는 쇼핑몰을 운영하는데, 항상 고객에게 차량번호를 받아야 한다고 가정해보자. 차량 번호는 123가4567 형식으로 입력된다고 가정했을때, 고객 개개인이 입력하는 게시판이다보니 형식도 제각각일 것이다. 아래 고객이 입력한 몇가지 예문을 살펴보자.
[예문]
1. 안녕하세요? 제 차량 번호는 123가4567입니다.
2. 123가 4567
3. 투싼 1 2 3 가 4 5 6 7 이 제 차 번호입니다.
4. 제 번호는 123.가.4567번 입니다.
5. 1a2b3c가4.5,6d7-
뭐... 대충 생각나는대로 적어봤지만, 실제 쇼핑몰을 운영해보면 정말 세상에는 다양한 사람들이 많다는걸 알 수 있고, 가능한한 많은 상황에 대처해야 그만큼 사람이 하는 업무를 줄일 수 있으니 이왕이면 위 4가지 예문 정도에서는 모두 차량번호를 뽑아내야 한다. 좀 억지스럽지만 5번도 넣어봤다. 얼토당토하지도 않지만, 그냥 극단적인 예문이라고 생각하자.
이제 정규 표현식을 간략히 알아보자. 정규 표현식은 정말 다양하니 앞으로 차근차근 알아보기로 하고 위 예문처럼 차량번호를 인식하는 정규 표현식은 아래와 같다.
\d{3}[가-힣]\d{4}
이 표현식을 처음보면 어색할 수도 있겠지만 사실 그리 어려운건 아니다. 숫자3자리(\d{3}),한글1자리{가-힣},숫자4자리(\d{4})가 모두 붙어있는 구문을 찾는 것이다.
이 정규 표현식을 이용하기 전에 고객이 입력한 내용에서 숫자와 한글만 남기고 우리에게 필요 없는 영문과 기타 특수문자를 모두 제거하기 위한 정규 표현식을 먼저 알아보자. 여기에 사용되는 정규표현식은 아래와 같다.
[^가-힣0-9]
조금 다른 형식이 나왔는데, 대괄호로 감싸져 있고, 앞에 ^ 기호가 들어있다. 대괄호 안에 있는 ^ 기호는 Not을 의미한다. 이제 소스를 살펴보자.
1. RemainNumHan() - 숫자와 한글만 남기고 나머지 문자열 모두 제거
Private Function RemainNumHangul(pStr As String) As String
Dim lpRegex As New Regex("[^가-힣0-9]")
Return lpRegex.Replace(pStr, "")
End Function
여기에서 정규표현식 객체인 Regex 를 사용하는데 주목하자. 처음 접근하기가 어렵지만, 제대로 알아두면 문자열을 조작하는데 이만한게 없다는걸 사용할때마다 느끼게 될 것이다.
이 RemainNumHangul 함수를 통해 위 5가지 예문은 모두 아래와 같이 변경된다.
[예문]
1. 안녕하세요제차량번호는123가4567입니다
2. 123가4567
3. 투싼123가4567이제차번호입니다
4. 제번호는123가4567번입니다
5. 123가4567
모두 공백이나 마침표, 하물며 5번의 경우 영어 알파벳까지 사라지게 된다.
2. GetLicenseNum() - 차량 번호 형식에 맞는 문자열 반환
Private Function GetLicenseNum(pStr As String) As String
Dim lpRegex As New Regex("\d{3}[가-힣]\d{4}")
Dim lpMatch As Match = lpRegex.Match(pStr)
If lpMatch.Success Then
Return lpMatch.Value
Else
Return ""
End If
End Function
여전히 정규 표현식 객체인 Regex가 사용됐고, 이번에는 일치하는 값을 찾기 위해 Match 함수를 이용했다. 필요없는 부분을 빼고 최대한 간략히 적었으니 이해하는데 별 어려움은 없을 것이다.
마치며...
오늘은 정규 표현식을 사용하는 Regex 객체에 대해 알아봤는데, 기능이 정말 강력하니 추가 정보를 알고 싶은 사람은 검색해서 상세히 알아보면 문자열 관련 개발할때 많은 도움이 될 것이라 생각하며, 추후 기회가 된다면 이 객체에 대해 좀더 상세히 알아보는 시간을 갖도록 하자.
'VB.NET > 왕초보' 카테고리의 다른 글
[VB.NET] OrElse 연산자가 뭐지? 첨보네 (1) | 2024.04.12 |
---|---|
VB.NET 금액에 천원 단위 콤마 넣는 신박한 방법 (0) | 2024.03.12 |
VB.NET XML 파싱 - XmlDocument 사용 (0) | 2024.02.21 |
VB.NET Rnd, Randomize, Random 랜덤값 난수 사용하기 (0) | 2024.02.20 |
VB.NET HTML 파싱 - XPath를 사용한 HtmlAgilityPack 예제 (1) | 2024.02.19 |