일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Doubly Connected Edge List
- 외적
- Unity
- 보로노이다이어그램
- 분할축 이론
- Vector
- AABB
- 수학
- linux
- PS
- c#
- 문제풀이
- dp
- GJK
- uclidean algorithm
- 다이나믹 프로그래밍
- 우분투
- 알고리즘
- 벡터
- C
- SOH
- 내적
- Expanding Polytope Algorithm
- 리눅스
- C++
- Graham Scan
- 충돌 알고리즘
- 유니티
- ubuntu
- 백준
- Today
- Total
마이 플밍 블로그
Regular Expression 본문
복잡한 문자열 처리를 위해서는 Regular Expression를 사용한다.
닷넷에선 이 기능을 Regex 클래스를 중심으로 구현을 했다.
Regular Expression의 기능은 Perl에서 진화한 것인데 Perl 5 Regular Expression와 호환 되도록 하였다
Regular Expression을 이용하면 문자열 데이터에서 특정 패턴을 찾아내고 다른 문자열 데이터로 치환할 수 있다.
Regex 문자열 패턴 찾기
Regex 클래스를 활용해 특정 문자 패턴을 찾는 몇가지 예를 보자
Regex를 생성할 때 특정 문자패턴을 파라미터로 넘긴다 Match()메서드를 이용해서 문자열에 문자 패턴이
존재하는지 검사한다.
Regex.Match는 Match 클래스 객체를 리턴한다.
존재한다면 Match.Success가 True로 되고 Match.Index를 통해 문자 패턴의 위치를 알 수있다.
EX1 문자열에서 특정 문자 패턴을 찾는 예제로 맨처음 하나의 패턴만 찾는다
EX2 문자열에서 특정 문자 패턴이 여러개 있을 경우 NextMatch 매서드를 이용해서 특정 문자 패턴을 여러개 찾을 수 있다.
EX3 MatchCollection클래스를 이용한 것으로 모든 매칭 문자들을 MatchCollection 객체로 리턴한다
// Ex1. 첫 매치 문자열 출력
string str = "서울시 강남구 역삼동 강남아파트";
Regex regex = new Regex("강남");
Match m = regex.Match(str);
if (m.Success) {
Debug.Log(string.Format("{0}:{1}", m.Index, m.Value));
}
// Ex2. 매치된 문자열 계속 출력
Regex regex1 = new Regex("강남");
Match m1 = regex1.Match(str);
while (m.Success) {
Debug.Log(string.Format("{0}:{1}", m1.Index, m1.Value));
m1 = m1.NextMatch();
}
//// Ex3. Matches() 메서드
Regex regex2 = new Regex("강남");
MatchCollection mc = regex2.Matches(str);
foreach (Match m3 in mc) {
Debug.Log(string.Format("{0}:{1}", m3.Index, m3.Value));
}
Split
일반적인 string.split처럼 문자열을 분리시켜준다
string str = "서울시 강남구 역삼동 강남아파트";
Regex regex = new Regex(" ");
string[] vals = regex.Split(str);
foreach (string s in vals)
{
Debug.WriteLine(s);
}
Named Group
?<그룹이름> 이용해서 그룹을 지정할 수 있다.
Match.Groups[그룹이름]을 이용해서 그룹을 가져올 수 있다
// Ex1. named group (?<name> )
string str = "02-632-5432; 032-645-7361";
Regex regex = new Regex(@"(?<areaNo>\d+)-(?<phoneNo>\d+-\d+)");
MatchCollection mc = regex.Matches(str);
foreach (Match m in mc) {
string area = m.Groups["areaNo"].Value;
string phone = m.Groups["phoneNo"].Value;
Console.WriteLine("({0}) {1}", area, phone);
}
// Ex2
string str1= "<div><a href='www.sqlmgmt.com'>SQL Tools</a></div>";
string patt = @"<a[^>]*href\s*=\s*[""']?(?<href>[^""'>]+)[""']?";
Match m2 = Regex.Match(str1, patt);
Group g = m2.Groups["href"];
Console.WriteLine(g.Value);
패턴 내용을 그룹명으로 지정하면 ${그룹 명}로 치환 표현식에서 사용할 수 있다.
문자열 치환
// Ex1. 앞 공백 제거
string str = " 서울시 강남구 역삼동 강남아파트 1 ";
string patten = @"^\s+";
// 앞뒤 공백 모두 제거시: @"^\s+|\s+$";
Regex regex = new Regex(patten);
string s = regex.Replace(str, "");
Console.WriteLine(s);
// Ex2
string str1 = "02-632-5432; 032-645-7361";
string patten1 = @"(?<areaNo>\d+)-(?<phoneNo>\d+-\d+)";
Regex regex1 = new Regex(patten1);
string s1 = regex1.Replace(str1, @"(${areaNo}) ${phoneNo}");
Console.WriteLine(s1);
'Code > C#' 카테고리의 다른 글
[C#] GC(Garbage Collector)의 작동원리 (0) | 2022.04.03 |
---|---|
C# 확장메서드 (Extension Method) (0) | 2021.09.28 |