替换文本字符串

时间:2014-03-13 01:52:12

标签: c# .net regex

我有一个包含大量文本的标记文件,如下所示:

My markup file <title value="The title" /> and more text
and another title <title value="XXX" />The <text> blah blah blah

如何用新标题替换所有这些标题(可能使用正则表达式)?首先是几条规则:

  1. 标题引号之间的值不同。
  2. 还有其他value="xxxxx"文字与标题无关。
  3. 谢谢!

4 个答案:

答案 0 :(得分:0)

在不知道您将拥有的各种值标题 ...您可以使用支持正则表达式的文本编辑器,如:notepad ++:

<title value="[A-Za-z ]*" />

作为你的正则表达式。如果您的标题不仅仅包含数字字符和空格,则需要更改 [A-Za-Z]

答案 1 :(得分:0)

认为应该这样做:

string output = Regex.Replace(txt,"<title value=\".*?\"","<title value=\"My new title\"");

编辑:如果您的标题标签有额外的参数,这也将替换它们,但保留额外的参数:

string output2 = Regex.Replace(txt, "<title(.*?)value=\".*?\"", "<title$1value=\"My new title\"");

答案 2 :(得分:0)

如果要在双引号内替换某些文本,可以执行以下操作:

string originalStr = "My markup file <title value=\"The title\" /> and more text and another title <title value=\"XXX\" />The <text> blah blah blah";

string replacedStr = Regex.Replace(originalStr, @"""[^""]+""", "\"NewText\"");

答案 3 :(得分:0)

您可以使用Named Capturing GroupsSubstitutions来完成此操作,如下所示:

public static string ReplaceTitle(string input, string newTitle)
{
    string findPattern = @"(?<prepend><title\s+value\s*=\s*\"")([^\""]*)(?<append>\"")";
    string replacePattern = "${prepend}" + newTitle + "${append}";

    return Regex.Replace(input, findPattern, replacePattern, RegexOptions.IgnoreCase);
}

这是一个测试上述情况的演示代码

using System.IO;
using System;
using System.Text.RegularExpressions;

public class Program
{
    static void Main()
    {
        string input = "My markup file <title value=\"The title\" /> and more text and another title <title value=\"XXX\" />The <text> blah blah blah";

        Console.WriteLine(ReplaceTitle(input, "NEWTITLE"));        
    }

    public static string ReplaceTitle(string input, string newTitle)
    {
        string findPattern = @"(?<prepend><title\s+value\s*=\s*\"")([^\""]*)(?<append>\"")";
        string replacePattern = "${prepend}" + newTitle + "${append}";

        return Regex.Replace(input, findPattern, replacePattern, RegexOptions.IgnoreCase);
    }
}