[英]parse text into key/value pair or json
我的文本格式如下,我想知道最好的方法是從字段中將其作為屬性從中創建用戶對象。
我不太了解正則表達式,我在看csharp中的字符串方法,尤其是IndexOf和LastIndexOf,但是我認為這太混亂了,因為大約有15個字段。
我正在嘗試使用C Sharp
一些特點:
Title: Mr Company: abc capital Address1: 42 mystery lane Zip: 112312 Country: Ireland Interest: Biking, Swimming, Hiking, Topic of Interest: Europe, Asia, Capital
這會將數據拆分為鍵值對,並將其存儲在字典中。 您可能需要進一步修改才能滿足更多要求。
var dictionary = data
.Split(
new[] {"\r\n"},
StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(':'))
.ToDictionary(
k => k[0].Trim(),
v => v[1].Trim());
我可能會選擇這樣的東西:
private Dictionary<string, IEnumerable<string>> ParseValues(string providedValues)
{
Dictionary<string, IEnumerable<string>> parsedValues = new Dictionary<string, IEnumerable<string>>();
string[] lines = providedValues.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //Your newline character here might differ, being '\r', '\n', '\r\n'...
foreach (string line in lines)
{
string[] lineSplit = line.Split(':');
string key = lineSplit[0].Trim();
IEnumerable<string> values = lineSplit[1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()); //Removing empty entries here will ensure you don't get an empty for the "Interest" line, where you have 'Hiking' followed by a comma, followed by nothing else
parsedValues.Add(key, values);
}
return parsedValues;
}
或者,如果您贊成可讀性和可維護性不如大型調用鏈那么酷的概念:
private static Dictionary<string, IEnumerable<string>> ParseValues(string providedValues)
{
return providedValues.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(x => x.Split(':')).ToDictionary(key => key[0].Trim(), value => value[1].Split(new char[]{ ','}, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()));
}
對於這些情況,我強烈建議您更熟悉機智的正則表達式。 解析“半”結構化文本非常容易,並且具有常規exp的邏輯。
對於前。 這個(以及下面的其他只是變體,根據您的需要,有很多方法可以做到)
title:\s*(.*)\s+comp.*?:\s*(.*)\s+addr.*?:\s*(.*)\s+zip:\s*(.*)\s+country:\s*(.*)\s+inter.*?:\s*(.*)\s+topic.*?:\s*(.*)
給出結果
1. Mr
2. abc capital
3. 42 mystery lane
4. 112312
5. Ireland
6. Biking, Swimming, Hiking,
7. Europe, Asia, Capital
或-對任何事物都更開放:
\s(.*?):\s(.*)
將您的輸入解析成不錯的組,如下所示:
Match 1
1. Title
2. Mr
Match 2
1. Company
2. abc capital
Match 3
1. Address1
2. 42 mystery lane
Match 4
1. Zip
2. 112312
Match 5
1. Country
2. Ireland
Match 6
1. Interest
2. Biking, Swimming, Hiking,
Match 7
1. Topic of Interest
2. Europe, Asia, Capital
我不熟悉c#(及其正則表達式的方言),我只是想喚醒您的興趣...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.