這是我正在處理的代碼的簡化版本。代碼的目的是獲取一串信息,將其分解並將其解析爲關鍵值對。C#使用正則表達式來分割單詞
使用在下面的示例中的信息,一個字符串可能看起來像:關於上面的例子
"DIVIDE = KE48 CLACOS = 4556D DIV = 3466 INT = 4567"
還有一點,至少有三個,我們必須分析出偶爾會包括附加價值的功能。這是一個更新的假示例字符串。
"DIVIDE = KE48, KE49, KE50 CLACOS = 4566D DIV = 3466 INT = 4567 & 4568"
問題在於代碼拒絕分開分割DIVIDE和DIV信息。相反,它會在DIV處繼續分割,然後將其餘的信息分配爲值。
有沒有辦法告訴我的代碼,DIVIDE和DIV需要解析爲兩個單獨的值,並且不要將DIVIDE變成DIV?
public List<string> FeatureFilterStrings
{
// All possible feature types from the EWSD switch.
get
{
return new List<string>() { "DIVIDE", "DIV", "CLACOS", "INT"};
}
}
public void Parse(string input){
Func<string, bool> queryFilter = delegate(string line) { return FeatureFilterStrings.Any(s => line.Contains(s)); };
Regex regex = new Regex(@"(?=\\bDIVIDE|DIV|CLACOS|INT)");
string[] ms = regex.Split(updatedInput);
List<string> queryLines = new List<string>();
// takes the parsed out data and assigns it to the queryLines List<string>
foreach (string m in ms)
{
queryLines.Add(m);
}
var features = queryLines.Where(queryFilter);
foreach (string feature in features)
{
foreach (Match m in Regex.Matches(workLine, valueExpression))
{
string key = m.Groups["key"].Value.Trim();
string value = String.Empty;
value = Regex.Replace(m.Groups["value"].Value.Trim(), @"s", String.Empty);
AddKeyValue(key, value);
}
}
private void AddKeyValue(string key, string value)
{
try
{
// Check if key already exists. If it does, remove the key and add the new key with updated value.
// Value information appends to what is already there so no data is lost.
if (this.ContainsKey(key))
{
this.Remove(key);
this.Add(key, value.Split('&'));
}
else
{
this.Add(key, value.Split('&'));
}
}
catch (ArgumentException)
{
// Already added to the dictionary.
}
}
}
的進一步信息,所述字符串信息不具有的每個鍵/值之間的空間的一組數,每個串可以不包括所有的值和特徵不總是以相同的順序。歡迎來解析舊的電話交換機信息。
如何用空格分割輸入的字符串,刪除空項,然後通過字符串數組迭代?正則表達式並不總是最好的選擇 –