簡體   English   中英

正則表達式-在用C#替換文本時刪除文本

[英]Regex - remove text while replacing text with 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>

另外,我想刪除名稱值后面和結束符之間的所有多余文本,以便:

<person name="John" hello>

應該更正為:

<person name="John-Example">

我已經閱讀了幾則有關正則表達式的文章,並覺得這里缺少一些小東西。 我將如何以及為什么要解決此問題?

編輯:我不認為我正在使用的這些腳本歸類為XML-整個腳本可能帶有<>標記,也可能沒有。 回到這個問題的最初目的,有人可以解釋正則表達式的行為嗎? 以及如何在結束標記之前的名稱值之后刪除多余的文本?

您的正則表達式太貪心了。 嘗試.*? 而不只是.*

另外,請不要使用正則表達式解析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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM