정규식을 언제 마음잡고 익히던가 해야지, 매번 고생입니다. 일단 정규식 대신 무식한 방법을 동원해서 일을 끝내놨는데 애 좀 먹고 나니까 기분이 언짢네요. 혹시 다음과 같은 경우를 어떻게 처리하는지 알고 계시면 내공 좀 전달해주세요.
string pattern = "1234*5678" string text = "1234테스트5678" string result = Parse(pattern, text); Assert.Equal(result, "테스트");
Parse
함수를 정규식으로 짜고 싶습니다.
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
지금 구체적인 상황은 정확하게 몰라서 일반적인 조언만 해드립니다.
http://support.microsoft.com/kb/308252를 보시면 조금 도움이 되실지도.
string result = Regex.Match(text, “[^0-9]+”).ToString();
별 도움은 안되시겠지만..
——————————————————-
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);
}
——————————————————-
음… 제가 적은 코드 중에 Parse(text)를 Parse(pattern, text)로 바꿔야하네요. 아무래도 이 부분 때문에 헷갈리는 분들이 많겠네요.
스팟님이 적어주신 코드가 제대로 작동하네요. 음… 비슷하게 짰었는데 약간 틀렸군요. 역시 뭘 알려면 똑바로 알아야……
모두 도와주셔서 감사합니다.
단순히 정규식은 아니고, 정규식 전처리가 필요할 것 같습니다.
string Parse(string pattern, string text) {
return Regex.Match(
text,
pattern.Replace(”*”, “(.*?)”)
).ToString();
}
사실 제가 CLR에서 정규식을 써본 적이 없어서, 저 문법이 제대로 작동할지는 모르겠네요;
맞는 코드 같습니다. 안 그래도 이런 식으로 코드를 바꿔놨습니다. ^^
1234와 5678 사이의 문자열만 추출하는 것이 목적인가요? 그렇다면 한줄로 간단히:
Console.WriteLine(Regex.Match(“1234테스트5678”, @”(?
<=1234).*(?=5678)"));
결과는 아래처럼 됩니다:
“1234테스트5678” =>
“테스트”
“123412345678” => “1234”
“123456785678” => “5678”
1234와 5678은 단순히 테스트 예제입니다. ^^