如何使用C#替换包含反斜杠的字符串中的某些值?

时间:2012-08-15 04:19:16

标签: c#

我有以下内容:

var topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\">XX</option>\r\n";

一个看起来像这样的字符串:

var topicValue = "456";

有什么方法可以在topicValue匹配时创建一个类似于以下内容的新主题字符串:

var topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\" selected=\"selected\" >XX</option>\r\n";

我不确定如何创建一个可以使用我的反斜杠的正则表达式 主题字符串。还有一种比使用正则表达式更简单的方法吗?

3 个答案:

答案 0 :(得分:3)

将XML作为字符串操作永远不是一个好主意。看起来你在topic中有一部分XML。你为什么不把它当作XML来对待它。首先,让它成为一个有效的XML,只是为了使用它。

        <options>
              <option value=\"123\" isSelectd=\"false\">X</option>
              <option value=\"456\" isSelectd=\"false\">XX</option>
        </options>

此处添加了根节点<options>,还添加了一个新属性isSelectd,对于两个子节点,该属性最初为false。应搜索并更新节点456的值。现在使用XmlDocument课程,您可以轻松实现您想要的目标。

        var topic = "<options>" + 
               "<option value=\"123\" isSelectd=\"false\">X</option>" +
               "<option value=\"456\" isSelectd=\"false\">XX</option>" + 
               "</options>";

        int selectedValue = 456;

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(topic);
        foreach (XmlNode node in xmlDoc.ChildNodes[0].ChildNodes)
        {
            int value = Convert.ToInt32(node.Attributes[0].Value.ToString());
            if (value == selectedValue)
                node.Attributes[1].Value = "ture";
        }

        topic = xmlDoc.InnerXml;

主题现在包含以下XML,

        <options>
              <option value=\"123\" isSelectd=\"false\">X</option>
              <option value=\"456\" isSelectd=\"true\">XX</option>
        </options>

答案 1 :(得分:1)

把它写成它是如何写的。例如:

        string myString = "My name is \"John\"";
        Console.WriteLine(myString);
        myString = myString.Replace("\"John\"", "\"Jony\"");
        Console.WriteLine(myString);
        Console.ReadLine();

尝试使用以下代码来实现您的目标:

        string topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\">XX</option>\r\n";
        Console.WriteLine(topic);
        string topicValue = "456";
        string mustBeReplaced = string.Empty;
        string replaceResult = string.Empty;

        if (topic.Contains(topicValue))
        {
            mustBeReplaced = "value=\"" + topicValue + "\"";
            replaceResult = mustBeReplaced + " selected=\"selected\"";
            topic = topic.Replace(mustBeReplaced, replaceResult);
        }

        Console.WriteLine(topic);
        Console.ReadLine();

答案 2 :(得分:1)

好的,这是代码。请注意,这仅在空格和格式一致时才有效:

var topic = // topic here

const string optionFormat = @"<option value=\""{0}\""";

var topicValue = // topic value here

var topicToReplace = String.Format(optionFormat, topicValue);
var replaced = topic.Replace(topicToReplace , topicToReplace + @" selected=\""selected\""");