2008-11-03 57 views
2

對於一步法操作格式化爲XML(C#)的字符串,我需要解析的XML字符串的內容,並改變它的「ID」字段的數目骯髒的方式。但是,我不能冒險改變字符串的其他內容,例如。空白,換行符等等必須保持原樣!快速和更新「的ID」中

因爲我已經作出的XmlReader趨於混亂空白了,甚至有可能重新格式化你的XML我不想使用它(但隨時否則說服我)的體驗。這也爲RegEx尖叫,但是...我不擅長RegEx,特別是沒有.NET實現。

這裏的字符串的短的部分,需要在某些情況下要更新的ID字段的數量。字符串中可以有很多這樣的VAR條目。所以我需要將每個ID轉換爲Int32,比較&修改它,然後將其放回到字符串中。

<VAR NAME="sf_name" ID="1001210"> 

我正在尋找最簡單的(在編碼時間方面)和最安全的方式做到這一點。

回答

4

你正在尋找的正則表達式是:

ID="(\d+)" 

比賽第1組將包含數字。使用MatchEvaluator Delegate替換動態計算替換的匹配項。

Regex r = new Regex("ID=\"(\\d+)\""); 
string outputXml = r.Replace(inputXml, new MatchEvaluator(ReplaceFunction)); 

其中ReplaceFunction是這樣的:

public string ReplaceFunction(Match m) 
{ 
    // do stuff with m.Groups(1); 
    return result.ToString(); 
} 

如果你需要我可以展開正則表達式更具體地匹配。目前全部 ID值(僅包含數字)被替換。您還可以將這一點「額外智能」構建到匹配評估器函數中,並在不想更改的情況下使其返回未改變的匹配。

+0

謝謝!奇蹟般有效。只有輕微的錯誤是缺少\在正則表達式的字符串: 「ID = \」(\ d +)\ 「」 ......應該是 「ID = \」(\\ d +)\ 「」 – steffenj 2008-11-03 14:34:18