문제

이것은 매우 쉬운 질문이지만 올바른 해결책을 찾을 수는 없습니다. 형식에는 문자열이 있습니다.

A:B=C;D:E=F;G:E=H;...

반면 A, B 및 C는 영숫자 (및 상류뿐만 아니라 더 낮을 수 있음). A와 B는 길이 1+이고 C의 길이는 비어있을 수 있습니다.

나는 줄을 따라 무언가를 사용해야한다고 생각했다

((?<A>.+):(?<B>.+)=(?<C>.*);)*

그러나 나는 그것을 게으른 방식으로 일치시키는 방법을 모르겠습니다. 또한 각 경기의 결과를 얻는 방법을 잘 모르겠으므로 작은 코드 샘플에 감사드립니다.

당신이 나에게 힌트를 줄 수 있다면 기뻐요.

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 \w 이 영숫자와 일치합니다 ., 모든 것이 일치합니다. 그런 다음 한 번에 하나의 경기를 캡처하려고 할 수 있습니다.

(?<A>\w+):(?<B>\w+)=(?<C>\w*);

작은 예는 다음과 같습니다.

Regex regex = new Regex("(?<A>\\w+):(?<B>\\w+)=(?<C>\\w*);");
string test = "A:B=C;D:E=F;G:E=H";

// get all matches
MatchCollection mc = regex.Matches(test);

foreach (Match m in mc) { 
    Console.WriteLine("A = {0}", m.Groups["A"].Value);
    Console.WriteLine("B = {0}", m.Groups["B"].Value);
    Console.WriteLine("C = {0}", m.Groups["C"].Value);
}

노트: 정기적 인 표현을 실험하고 일종의 도움을 제공 할 수있는 몇 가지 도구가 있습니다. 나는 개인적으로 좋아합니다 Expresso - 시도해보십시오. 학습에 매우 유용합니다.

다른 팁

Regex가 요구 사항입니까? 문자열은 매우 구조적이고 잘 구조를 가지고 있으므로 Regex 없이도 쉽게 구문 분석 할 수 있습니다.

string input = "A:B=C;D:EF=G;E:H=;I:JK=L";
string[] elements = input.Split(new[] { ';' });
List<string[]> parts = new List<string[]>();
foreach (string element in elements)
{
    parts.Add(element.Split(new[] { ':', '=' }));
}
// result output
foreach (string[] list in parts)
{
    Console.WriteLine("{0}:{1}={2}", list[0], list[1], list[2]);
}

출력은 다음과 같습니다.

A:B=C
D:EF=G
E:H=
I:JK=L
Regex r = new Regex("(?<A>\\w)+:(?<B>\\w)+=(?<C>\\w)*;");

w는 [a-za-z0-9_]와 동일한 영숫자와 밑줄과 일치합니다.

백 슬래시가 문자열에서 탈출되므로 w가됩니다.

REGEX는 그룹 A, B 및 C를 캡처하고 세미콜론에 의해 구분 된 C 또는 전체 그룹의 0 이상의 요소와 일치합니다.

여러 개의 일치 객체가 있습니다.

MatchCollection m = r.Matches(sampleInput);
// m[0] will contain A:B=C;
// m[1] will contain D:E=F;
// m[2] will contain G:E=H;
// ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top