내 궁극적 인 목표는 다음 문자열을 JSON으로 변환하는 것이지만, 각 값과 fieldname을 결합하여 한 단계 더 가까워지는 뭔가를 해결할 것입니다.Regex match/replace 패턴에 대한 도움이 필요합니다.
샘플 데이터 : Regex.Replace()를 사용
Field1:abc;def;Field2:asd;fgh;
, 나는 이상과 같이 할 필요 : 그것은 할 수 있으면
Field1:abc,Field1:def,Field2:asd,Field2:fgh
궁극적으로,이 결과가 좋지 않을까 Regex를 통해 한 번의 호출로
{"Field1":"abc","Field2":"asd"},{"Field1":"def","Field2":"fgh"}
나는이 패턴의 다양한 변화를 시도했지만, 바로 그것을 얻을 수없는 것 :
(?:(\w+):)*?(?:([^:;]+);)
하나의 다른 예는 내가 그 비슷한 일을 찾을 수 있지만, 단지 충분히 차이가있어서 손가락을 대지 않을 수 있습니다.
EDIT:
Regex to repeat a capture across a CDL?
여기 내 솔루션입니다. 다른 사람들이 게시 한 크레딧을주고 싶기 때문에 "솔루션"으로 게시하지 않을 것입니다. 결국, 나는 게시 된 각 솔루션에서 조각을 가져 와서 이것을 만들었습니다. 게시 한 모든 사람에게 감사드립니다. 필자는 컴파일 된 솔루션을 가장 빨리 실행했으며 가장 정확한 결과를 얻었습니다.string hbi = "Field1:aaa;bbb;ccc;ddd;Field2:111;222;333;444;";
Regex re = new Regex(@"(\w+):(?:([^:;]+);)+");
MatchCollection matches = re.Matches(hbi);
SortedDictionary<string, string> dict = new SortedDictionary<string, string>();
for (int x = 0; x < matches.Count; x++)
{
Match match = matches[x];
string property = match.Groups[1].Value;
for (int i = 0; i < match.Groups[2].Captures.Count; i++)
{
string key = i.ToString() + x.ToString();
dict.Add(key, string.Format("\"{0}\":\"{1}\"", property, match.Groups[2].Captures[i].Value));
}
}
Console.WriteLine(string.Join(",", dict.Values));
경우에, 나는 게임입니다. –
큰 입력 문자열을 비교해 보면 흥미로울 것입니다 – sll
동의합니다. 여기에 표시된 동일한 데이터는 변환하려는 데이터와 비교할 때 매우 작습니다.실제 개체는 31 개의 필드를 포함하며 100-200 개의 개체를 포함 할 수 있습니다. –