为了账号安全,请及时绑定邮箱和手机立即绑定

在字符串中查找单词并替换它

在字符串中查找单词并替换它

C#
慕无忌1623718 2022-11-21 20:38:15
我有一个字符串 [XML],我想找到包含一个词的标签并将该标签替换为另一个名称。我试过使用这个,但没有成功:var regex = new Regex(@"\bKeyValueOfstringOutcome\b", RegexOptions.IgnoreCase);string result = regex.Replace(xml.Document.ToString(), "");这是我的 XML:<Response>  <Outcome>    <KeyValueOfstringOutcomeTest1>      <Key>Icon</Key>      <Value>        <DataType>System.String</DataType>        <Field>Icon</Field>        <Value>O</Value>      </Value>    </KeyValueOfstringOutcomeTest1>    <KeyValueOfstringOutcomeTest2>      <Key>IconDescription</Key>      <Value>        <DataType>System.String</DataType>        <Field>IconDescription</Field>        <Value>Old</Value>      </Value>    </KeyValueOfstringOutcomeTest2>    <KeyValueOfstringOutcomeTest3>      <Key>IconLongDescription</Key>      <Value>        <DataType>System.String</DataType>        <Field>IconLongDescription</Field>        <Value>Older</Value>      </Value>    </KeyValueOfstringOutcomeTest3>  </Outcome></Response>我需要找到包含 KeyValueOfstringOutcome 的节点,并将 KeyValueOfstringOutcomeTest1、KeyValueOfstringOutcomeTest2、KeyValueOfstringOutcomeTest3 替换为 KeyValueOfstringOutcome。
查看完整描述

5 回答

?
米脂

TA贡献1836条经验 获得超3个赞

这就是我为实现这一目标所做的工作。


var match = Regex.Match(xml.Document.ToString(), @"KeyValueOfstringOutcome.*>");

                if (match.Success)

                {

                    var replacedText = Regex.Replace(xml.Document.ToString(), @"KeyValueOfstringOutcome.*>", "KeyValueOfstringOutcome>");

                }


查看完整回答
反对 回复 2022-11-21
?
千万里不及你

TA贡献1784条经验 获得超9个赞

如果我对你的理解是正确的,你想摆脱Test1,Test2等等。我建议使用这种Replace方法。


string replacedXML = Regex.Replace(xml.Document.ToString(),

                                   @"KeyValueOfstringOutcomeTest\d+",

                                    "KeyValueOfstringOutcome");

\d+将匹配关键字后面出现的 1 次或多次数字


查看完整回答
反对 回复 2022-11-21
?
临摹微笑

TA贡献1982条经验 获得超2个赞

如果有帮助,试试这个。

string result = Regex.Replace(xml.Document.ToString(), "[a-zA-Z0-9]*KeyValueOfstringOutcome[a-zA-Z0-9]*","KeyValueOfstringOutcome");


查看完整回答
反对 回复 2022-11-21
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

我不会REGEX用来匹配和更改节点的名称。如果你曾经更新过你的文件或命名,它就会崩溃或改变一些其他包含流行语的节点。


childnode所以我会在你想要更改的 lvl/hierarchy 中创建一个循环,然后抓住它并重命名它。


foreach (XmlNode node in doc.ChildNodes)

{        

    // [2] should be the the deepth of childenotes named `KeyValueOfstringOutcomeTestX`

    node.ChildNode[2].Name = "YOUR NEW NAME TO THIS NODE";  

}

doc.Save();  // Change renamed nodes to the document.


查看完整回答
反对 回复 2022-11-21
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

使用 xml linq:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Xml;

using System.Xml.Linq;


namespace ConsoleApplication107

{

    class Program

    {

        const string FILENAME = @"c:\temp\test.xml";

        static void Main(string[] args)

        {

            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> keyValueOfstringOutcomeTests = doc.Descendants().Where(x => x.Name.LocalName.StartsWith("KeyValueOfstringOutcomeTest")).ToList();

            foreach (XElement keyValueOfstringOutcomeTest in keyValueOfstringOutcomeTests)

            {

                keyValueOfstringOutcomeTest.ReplaceWith(new XElement("KeyValueOfstringOutcomeTest", keyValueOfstringOutcomeTest.Elements()));

            }

        }

    }

}


查看完整回答
反对 回复 2022-11-21
  • 5 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信