You are on page 1of 9

230104 원철연, c# ~~ ch 04

일반적인 프로그래밍 환경에서 문자열은 가장 많이 사용되는 데이터 타입이라고 할 수 있습니다.

하나의 문자열은 하나 이상의 문자들로 구성되며 string 키워드를 이용하여 선언됩니다.

여러분의 이름, 전화번호, 주소, 생년월일등이 모두 문자열이며, 날짜, 숫자 역시 문자열의 형태로 나타낼 수
있습니다.

이와같이 문자열의 용도는 대단히 광범위 합니다.

이번 장에서는 .NET Framework 에서 문자열을 핸들링할 수 있도록 제공되는 클래스들 중 System


네임스페이스에 존재하는 String 클래스와 System.Text.RegularExpressions 네임스페이스에 존재하는
정규표현식 관련 클래스를 이용하여 문자열을 다루는 방법을 소개합니다.

먼저 String 클래스르 설명하고 다음으로 StringBuilder 클래스를 이용한 검색, 삭제, 복사, 대체등과 같은
작업을, 마지막으로 문자열 중에서 특정한 패턴을 취하는 형태가 존재하는지 파악하고 이를 교체하는 등의
작업을 수행하는데 사용되는 정규표현식에 대하여 설명하겠습니다.

01. String 클래스를 이용한 문자열 핸들링

검색(Searching)

경우에 따라 한 문장에서 특정한 문자나 문자열이 몇 번이나 발생하고 어떤 위치에서 발생하는지를 알아야 할
경우가 있습니다. 이럴 경우 사요ㅕㅇ할 수 있는 메서드들을 C#에서는 여러가지 형태로 제공합니다.

만일 문자열에서 특정 단어나 그 단어의 위치를 알고자 할 경우에 IndexOf(), LastIndexOf(), IndexOfAny(),


LastIndexAny()와 같은 메서드를 이용합니다.

IndexOf()

문장 내에서 특정 문자나 문자열이 맨 처음 발견되는 인덱스 번호를 알려주는 메서드입니다. 단순하게


생각하면 단순하다고 할 수 있겠지만 아래와 같이 IndexOf()메서드는 파라미터(매개변수)에 따라 다양하게
사용될 수 있습니다.

public int IndexOf(char value);

public int IndexOf(string value);

public int IndexOf(char value, int startIndex);

public int IndexOf(string value, int startIndex);


public int IndexOf(string value, StringComparison comparisonType);

public int IndexOf(char value, int startIndex, int count);

public int IndexOf(string value, int startIndex, int count);

public int IndexOf(string value, int startIndex, StringComparison comparisonType);

public int IndexOf(string value, int startIndex, int count, StringComparison comparisonType);

value : 검색할 문자 및 문자열

startIndex :검색 대상 문장에서의 배열 시작 위치

comparisonType : StringComparison 열거형 자료형의 멤버변수

count : 검색할 문자위치수(범위)

char value, string value, StringComparison comparisonType 같은 것을 파라미터 혹은 매개변수라고 하는데


comparisonType 을 제외한 것들과 포함하는 것들을 나눠서 예제를 다뤄보기로 하겠습니다.

먼저 comparisonType 을 제외한 예제입니다.

IndexOf 라는 이름으로 Console 응용프로그램 프로젝트를 하나 생성한 후 아래와 같이 코드를 작성합니다.

======== 참조 문서

정규식

네임스페이스 using System.Text.RegularExpressions; 을 추가해주어야 한다.

. : 하나의 문자를 의미한다.

예제 : A.B 패턴은 AB 사이에 한문자가 포함된 3 자로 구성

AAB(일치), A1B(일치),

AB(불일치),AAAB(불일치) 이다.
? : 아무문자도 없거나 하나의 문자가 있는 것을 의미한다.

예제 : A?B 패턴은 AB 사이에 문자가 없거나 하나가 포함된 3 자로 구성

AAB(일치), AB(일치),

AAA(불일치), AAAB(불일치) 이다.

* : 0 개나 하나이상의 문자가 있는 것을 의미한다.

예제 : A*B 패턴은 앞에는 A, 뒤에는 B 만 존재해야 한다.

AB(일치), AAAAAAAAAB(일치), A123B(일치),

AAAAAAAA(불일치) 이다.

+ : +앞에있는 문자가 한번이상 반복됨을 의미한다.

예제 : AB+ 패턴은 AB(일치), ABBBB(일치), ABC(불일치), A(불일치) 이다.

[] : [ ] 사이에 있는 형식이 일치하는것을 의미한다. 즉 [AB]는 A, B 만일치, [A-Z] 는 A 부터 Z 중 하나의 문자와


일치한다.

예제 : [A-C] 패턴은 A(일치), B(일치), AB(불일치), BC(불일치) 이다.

[^] : ^다음에 문자를 쓰면 해당 문자를 제외한다는 것을 의미한다.

예제 : [^A-C]D 패턴은 DD(일치), AD(불일치), DDD(불일치), D(불일치) 이다.


() : ( ) 사이에 문자가 하나의 묶음이된다. 즉 (ab)+ 는 abababab 와 일치한다.

예제 : (ab) 패턴은 ab(일치), ba(불일치) 이다.

{} : { } 사이에 숫자를 쓰면 그 숫자 만큼 패턴이 반복됨을 의미한다.

[A-C]{1,4}는 A,B,C 를 1 개에서 4 개 조합하면 된다. AAAA 도 가능하고 A, BA, ABC, ACBA 도 가능하다.

예제 : [A-C]{1,3} 패턴은 AA(일치), CBC(일치), ADA(불일치), ACCC(불일치)이다.

^ : 문자열의 시작을 의미한다.

@ : 문자열의 끝을 의미한다.

-------------------------------

C# 정규식 기호표 (Regular Expression)

Pattern

Matching Criterion

Example

+ 앞의 글자에 연달아서, 뒤에 글자가 붙어서 따라 오는경우

to+ 는 too, tooo 처럼 to 뒤에 어떤것이 오는경우

* 바로 앞의 글자가 없거나, 또는 바로앞글자가 있고 뒤에 글자가 따라올때

to* 는 t, to, too 처럼 바로앞의 글자생략까지 포함


? 바로 앞의 글자가 없거나 있는경우

te?n 는 ten or tn 임.

teen 은 포함 안됨

{n} n 의수(입력된 숫자)만큼 정확하게 앞글자를 반복한다.

te{2}n 은 teen 이다. ten 이나 teeen 은 포함안됨

{n,} n 의 수(입력된 숫자) 이하 만큼 반복 해준다

te{1,}n 은 ten 이나 teen 이다. tn 은 포함안됨.

{n,m} n 과 m 사이의수(입력한 두수의 차이)만큼 앞 글자를 반복

te{1,2}n 은 ten 이나 teen 이다

\ 슬래쉬 뒤에 오는 (+, *, 와 ?처럼) 특수한 의미를 가진 문자가 오면 그대로 처리하라는 의미

A\+B 과 A+B 는 동일한의미.

+ 가 특수한 의미를 가진 문자이므로 슬래쉬를 써준것

\d \D

(\d)는 숫자 (\D)는 숫자가 아닌 글자를 말함. 전자는[0-9], 후자는[^0-9] 일치 함

\d\d 는 55 로, \D\D 는 xx 로 예를 들수 있음

\w \W (\w)는 문자를(밑줄이나 괄호등 까지 포함), (\W)은 문자가 아닌글을 말함.

이는 [a-zA-Z0-9_]. 과 [^a-zA-Z0-9_]. 과 일치함


A_19 은 \w\w\w\w 이고

($). 는 \W\W\W 이다

\n \r \t \v \f 순서대로, 다음줄로 넘어가기, 그줄의 첫번째로 돌아가기, 가로 탭, 세로 탭, 피드

\s \S (\s)는 빈공간을 (\S)는 빈공간이 아닌 글자로 채워진 공간을 말함

\w\s\w\s\w 는 A B C 처럼 문자 네개 공백두개

. (dot) . (마침표)는 한글자인 문자를 대표하는 기호. 문자 가운데 \n 는 인식못함

a.c 의 예는 abc.

abcc 는 안됨

| 논리기호 OR 의 의미.

"in|en" matches enquiry.

[. . . ] 괄호 안에 있는 문자 중에 있는 하나의 문자(알파벳, 점은 문자를 의미함)

[aeiou] 는 u(또는 각각 a, e, i, o 모두가능). [\d\D]는 하나의 숫자나 숫자가 아닌글

[^. . .] 괄호 안에 없는 하나의 문자(알파벳)

[^aeiou] matches x.

정규식 그룹명 이용법

string txt ="Monday Hi:88 Lo:56 Tuesday Hi:91 Lo:61";


string rgPatt = @"( ?[a-zA-Z]+)\s*(?Hi:\d+\s*Lo:\d+)";

// 그룹명은 위에서 처럼 ?<그룹명> 으로 명명 해주고

MatchCollection mc = Regex.Matches(txt, rgPatt);

// 스트링값과 정규식을 mc 그룹으로 묶어준후에

foreach(Match m in mc) // mc 그룹안의 그룹 하나 하나를 m 으로 명명해주고

Console.WriteLine("{0} {1}",

m.Groups["day"],m.Groups["temps"]);

//m 의 그룹을 위에서 지정해준 이름으로 불러옴. m.Groups["그룹명"]

//출력하면 Monday Hi:88 Lo:56

// Tuesday Hi:91 Lo:61

숫자 값만 리턴 하는 정규식 예

protected string NumNull(string data)

if (string.IsNullOrEmpty(data))

return "0";

else

Regex reg = new Regex(@"[^\d]+");

if (reg.IsMatch(data))
return data;

else

throw new Exception("숫자 값이 필요한 곳에 문자열이 존재합니다. 오류자료 : " +data);

기타 추가 예제

//문자열이 숫자 형식인지를 확인하는 함수

public bool IsNumber(string strValue)

if (strValue == null || strValue.Length < 1)

return false;

//요기서 정규식 사용

Regex reg = new Regex(@"^(\d)+$");

return reg.IsMatch(strValue);

// 문자열이 알파벳으로만 구성되어 있는지를 확인하는 함수

public bool IsAlpabet(string strValue)

if (strValue == null || strValue.Length < 1)


return false;

Regex reg = new Regex(@"^[a-zA-Z]+$");

return reg.IsMatch(strValue);

//시작문자열이 알파벳이고, 알파벳과 숫자로 이루어진 문자열인지 여부 확인하는 함수

public bool IsAlpaNumber(string strValue)

if (strValue == null || strValue.Length < 1)

return false;

Regex reg = new Regex(@"^[a-zA-Z]+[0-9]*$");

return reg.IsMatch(strValue);

출처: https://sourcenote.tistory.com/22 [::쓸데없는 잡학공책:::티스토리]

You might also like