정규표현식 질문이요~

  • Post author:
  • Post category:
  • Post comments:9 Comments
  • Post last modified:September 1, 2008

정규식을 언제 마음잡고 익히던가 해야지, 매번 고생입니다. 일단 정규식 대신 무식한 방법을 동원해서 일을 끝내놨는데 애 좀 먹고 나니까 기분이 언짢네요. 혹시 다음과 같은 경우를 어떻게 처리하는지 알고 계시면 내공 좀 전달해주세요.

string pattern = "1234*5678"
string text = "1234테스트5678"
string result = Parse(pattern, text);

Assert.Equal(result, "테스트");

Parse 함수를 정규식으로 짜고 싶습니다.

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

9 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
jrogue
16 years ago

지금 구체적인 상황은 정확하게 몰라서 일반적인 조언만 해드립니다.

http://support.microsoft.com/kb/308252를 보시면 조금 도움이 되실지도.

이정민
이정민
16 years ago

string result = Regex.Match(text, “[^0-9]+”).ToString();

스팟
16 years ago

별 도움은 안되시겠지만..
——————————————————-
c#
——————————————————-
string pattern = @“1234(.*?)5678”;
        string text = “1234테스트5678”;

        Regex regex1 = new Regex(pattern, RegexOptions.IgnoreCase);
        MatchCollection matches1 = regex1.Matches(text);
       
        foreach (Match match in matches1)
        {
          System.Console.WriteLine( match.ToString() );
          GroupCollection groups = match.Groups;
          System.Console.WriteLine(groups[1].Value);
        }
——————————————————-

최재훈
16 years ago

음… 제가 적은 코드 중에 Parse(text)를 Parse(pattern, text)로 바꿔야하네요. 아무래도 이 부분 때문에 헷갈리는 분들이 많겠네요.

최재훈
16 years ago

스팟님이 적어주신 코드가 제대로 작동하네요. 음… 비슷하게 짰었는데 약간 틀렸군요. 역시 뭘 알려면 똑바로 알아야……

모두 도와주셔서 감사합니다.

홍민희
16 years ago

단순히 정규식은 아니고, 정규식 전처리가 필요할 것 같습니다.

  string Parse(string pattern, string text) {
      return Regex.Match(
        text,
        pattern.Replace(”*”, “(.*?)”)
      ).ToString();
  }

사실 제가 CLR에서 정규식을 써본 적이 없어서, 저 문법이 제대로 작동할지는 모르겠네요;

최재훈
16 years ago

맞는 코드 같습니다. 안 그래도 이런 식으로 코드를 바꿔놨습니다. ^^

방준영
16 years ago

1234와 5678 사이의 문자열만 추출하는 것이 목적인가요? 그렇다면 한줄로 간단히:

Console.WriteLine(Regex.Match(“1234테스트5678”, @”(?

<=1234).*(?=5678)"));

결과는 아래처럼 됩니다:
“1234테스트5678” =>

“테스트”
“123412345678” => “1234”
“123456785678” => “5678”

최재훈
16 years ago

1234와 5678은 단순히 테스트 예제입니다. ^^