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

如何使用C#替换包含反斜杠的字符串中的某些值?,c#,C#,我有以下资料: var topic = "<option value=\"123\">X</option>\r\n <option value=\"456\">XX</option>\r\n"; 是否有一种方法可以在topicValue匹配时创建如下所示的新主题字符串: var topic = "<option value=\"123\">X</option>\r\n <option value=\"456\"

我有以下资料:

var topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\">XX</option>\r\n";
是否有一种方法可以在topicValue匹配时创建如下所示的新主题字符串:

var topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\" selected=\"selected\" >XX</option>\r\n";
var topic=“X\r\n XX\r\n”;
我不确定的是如何创建一个正则表达式来处理我的
主题字符串。还有比使用正则表达式更简单的方法吗?

按照它的编写方式编写。例如:

        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();
string topic=“X\r\n XX\r\n”;
Console.WriteLine(主题);
字符串topicValue=“456”;
string mustbereplace=string.Empty;
string replaceResult=string.Empty;
if(主题包含(主题值))
{
mustbereplace=“value=\”“+topicValue+”\”;
replaceResult=mustbereplace+“selected=\“selected\”;
topic=topic.Replace(mustbereplace,replacesult);
}
Console.WriteLine(主题);
Console.ReadLine();

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

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\""");
var-topic=//此处的主题

const string optionFormat=@“将XML作为字符串进行操作从来都不是一个好主意。看起来您在
主题
中有XML的一部分。为什么不将其视为XML。首先,让我们将其设为有效的XML,以便使用

        <options>
              <option value=\"123\" isSelectd=\"false\">X</option>
              <option value=\"456\" isSelectd=\"false\">XX</option>
        </options>
主题现在包含以下XML

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

X
XX

您可以将“option value=\\\”替换为“option value=\\\”,后跟“selected=\\\“selected\\”。很抱歉,我仍然不确定最佳语法。我应该使用正则表达式还是有其他方法?对于假定的方法,string.replace就足够了。这是string.replace(“选项值=\\\\“456\\\”,“选项值=\\\\“456\\\”所选=\\\\”所选\\).当然,你可以通过将数字作为变量传递来使其更灵活。@ChriPf-我需要做topic.replace吗?你能把这个作为变量的答案,这样我就可以接受并结束这个问题了。非常感谢。嗯…-实际的解决方案是由@MichaelGraczyk提出的,所以我宁愿把这归功于他。我认为你应该删除它“@”sign and write“@AdilMammadov这是两个不同的字符串。我正在尝试您的方法,但我遇到一个错误:object”不包含“Contains”的定义和最佳扩展方法重载-有什么想法吗?您能用“string topic”替换“var topic”吗然后重试?操作无法使用有效的XML,因为它包含反斜杠转义引号。
        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;
        <options>
              <option value=\"123\" isSelectd=\"false\">X</option>
              <option value=\"456\" isSelectd=\"true\">XX</option>
        </options>