繁体   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