2013-01-21 120 views
0

我試圖通過使用它來編輯我有的腳本學習正則表達式。正則表達式 - 刪除文本,而用c替換文本#

我的腳本包含像這樣

<person name="John">Will be out of town</person><person name="Julie">Will be in town.</person> 

我需要在腳本中替換名稱值 - 的除了名字總是相同的,但我可能有,我不希望更新的名稱。的我有什麼

簡單的例子:

string[] names = new string[1]; 
names[0] = "John-Example"; 
names[1] = "Paul-Example"; 

string ToFix = "<person name=\"John\">Will be out of town</person><person name=\"Julie\">Will be in town.</person>" 

for (int i=0; i<names.Length; i++) 
{ 
    string Name = names[i]; 
    ToFix = Regex.Replace(ToFix, "(<.*name=\")(" + Name.Replace("-Example", "") + ".*)(\".*>)", "$1" + Name + "$3", RegexOptions.IgnoreCase); 
} 

這適用於大多數情況,但我有兩個問題吧。有時它會刪除太多了,如果我有多人在字符串中,它會刪除所有的第一人,並在最後一個人之間,像這樣:

Hello <person name="John">This is John</person><person name="Paul">This is Paul</person> 

成爲

Hello <person name="John-Example">This is Paul</person> 

另外,我想要刪除後面的名稱值和收盤前carrat任何額外的文字,使:

<person name="John" hello> 

應更正爲:

<person name="John-Example"> 

我讀過幾篇關於正則表達式的文章,覺得我只是在這裏錯過了一些小東西。我如何以及爲什麼要解決這個問題?

編輯:我不認爲這些腳本,我正在與分類爲XML - 整個腳本可能會或可能不會有<>標記。回到我的這個問題的原始目標,有人可以解釋正則表達式的行爲嗎?如何在結束標記之前的名稱值後刪除多餘的文本?

+0

它xml..you應該使用XML解析器.. ** **不是正則表達式 – Anirudha

回答

2

你的正則表達式太貪婪了。嘗試.*?而不僅僅是.*

此外,請不要使用正則表達式來解析XML。


這裏有一個如何做我想你想的例子,使用XDocument

var xdoc = XDocument.Parse(ToFix); 
foreach (var person in xdoc.Elements("person")) 
{ 
    var name = person.Attribute("name"); 
    if (person.LastAttribute != name) 
    { 
     person.RemoveAttributes(); 
     person.SetAttributeValue(name.Name, name.Value + "-Example"); 
    } 
} 
var output = xdoc.ToString(); 
+0

感謝您及時的回覆。這些例子通常是我的腳本的大小,對於正則表達式來說,什麼是更好的選擇? – Mark

+0

我已經添加了一個例子。你應該可能谷歌像「C#解析XML」 – snurre