[英]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.