C# 删除两个字符串之间的字符串部分
所以,我在写一个程序,我有一个xml文件,里面有攻击动作,我希望用我的值替换伤害值,我已经有了我的值,还有一个名称,示例如下 “滑车| 2d8” 现在,在我的xml文件中,它如下所示:C# 删除两个字符串之间的字符串部分,c#,xml,string,C#,Xml,String,所以,我在写一个程序,我有一个xml文件,里面有攻击动作,我希望用我的值替换伤害值,我已经有了我的值,还有一个名称,示例如下 “滑车| 2d8” 现在,在我的xml文件中,它如下所示: <Move> <Name>Steamroller</Name> <Type>Bug</Type> <Frequency>EOT</Frequency> <Accuracy>2</A
<Move>
<Name>Steamroller</Name>
<Type>Bug</Type>
<Frequency>EOT</Frequency>
<Accuracy>2</Accuracy>
<Range>Melee</Range>
<Damage>1d10+10</Damage>
<Class>Physical</Class>
<Targets>1 Target, Pass</Targets>
<Effect>Steamroller Flinches the target on 15-20 during Accuracy Check. If the target is Small, Steamroller deals an additional 1d10.</Effect>
<ContestType>Tough</ContestType>
<Appeal>3d4</Appeal>
<ContestEffect>No Effect</ContestEffect>
<Special />
</Move>
<Move>
<Name>String Shot</Name>
<Type>Bug</Type>
<Frequency>At-Will</Frequency>
<Accuracy>3</Accuracy>
<Range>6</Range>
<Damage />
<Class>None</Class>
<Targets>1 Target, Column</Targets>
<Effect>String Shot creates a Column 2-meters wide. All Legal Targets within the Column lower their Speed 1 Combat Stage. If a target is hit by String Shot 5 times within 5 rounds of combat, they are Trapped. If a target's Speed Combat Stage has already been lowered 6 times, String Shot Traps them.</Effect>
<ContestType>Smart</ContestType>
<Appeal>2d4</Appeal>
<ContestEffect>Excitement</ContestEffect>
<Special>Threaded</Special>
</Move>
蒸汽压路机
缺陷
EOT
2.
混战
1d10+10
物理的
1目标,传球
在精度检查过程中,蒸汽压路机将目标在15-20的位置上退缩。如果目标很小,Steamroller将额外处理1d10。
强硬的
3d4
无效
弦乐射击
缺陷
随意
3.
6.
没有一个
1目标,列
字符串快照创建一个2米宽的柱。纵队内所有合法目标降低其速度1战斗阶段。如果一个目标在5轮战斗中被弦乐射击击中5次,他们就会被困住。如果一个目标的速度战斗阶段已经降低了6次,弦乐射击会将其困住。
聪明的
2d4
兴奋
螺纹
所以基本上我想替换
和
之间的文本,但我不知道怎么做,目前我有两个数组,一个数组中有我的移动和它们的损坏,另一个是Xml文件移动拆分(通过使用string.split(“”
),然后我像这样循环:
for (int index = 0; index < xmlMoves.Length; index++)
{
foreach (var move in myMovesArray)
{
//myMoves.Split('|')[0] is the name of the move,
//i'm comparing that the move i am at in my Array is the same as the one in the Array of Xml Moves
if (xmlMoves[index].Contains(myMoves.Split('|')[0]))
{
//Replace stuff here
}
}
}
for(int index=0;index
如果有人能帮忙,那就太好了,谢谢 您可以使用向后和向前前瞻进行正则表达式替换:
- 向后:
将(?根据注释,不要使用文本操作。使用LINQ to XML非常容易:
查看工作演示。给你 如注释中所述,您希望将xmlString解析为实际的XML对象,以便轻松访问元素。这使用XDocument,因此您需要使用System.XML.Linq;var doc = XDocument.Parse(xml); foreach (var move in doc.Descendants("Move")) { if ((string) move.Element("Name") == "Steamroller") { var damage = move.Element("Damage"); if (damage != null) { damage.Value = "2d8"; } } }
添加到文件顶部
private void XMltest() { string filePath = @"path to your xml"; string[] myMovesArray = new string[2] {"Steamroller|2d8", "String Shot|4d10"}; // Add a root to your xml since it wasn't shown in your example // NOTE: Remove these next two lines if your xml string does indeed have a root. string xmlFragments = File.ReadAllText(filePath); string rootedXML = "<root>" + xmlFragments + "</root>"; // load the xml XDocument xmlMoves = XDocument.Parse(rootedXML); // Loop through array and update associated element in xml with the new damage values foreach (var move in myMovesArray) { string moveName = move.Split('|')[0]; string moveDamage = move.Split('|')[1]; // Loop through xml and find the correct element by name foreach (XElement xmlMove in xmlMoves.Descendants("Move")) { if (xmlMove.Element("Name").Value == moveName) { xmlMove.Element("Damage").Value = moveDamage; } } } // Save back to xml file. xmlMoves.Save(filePath); }
您不必为此使用字符串操作-您可以使用Linq-to-Xml轻松访问private void XMltest() { 字符串filePath=@“xml的路径”; 字符串[]myMovesArray=新字符串[2]{“蒸汽压路机| 2d8”,“字符串快照| 4d10”}; //将根添加到xml中,因为示例中没有显示它 //注意:如果xml字符串确实有根,请删除下面两行。 字符串xmlFragments=File.ReadAllText(文件路径); 字符串rootedXML=”“+xmlFragments+”; //加载xml XDocument xmlMoves=XDocument.Parse(rootedXML); //循环遍历数组并用新的损坏值更新xml中的关联元素 foreach(myMovesArray中的var move) { 字符串moveName=move.Split(“|”)[0]; string moveDamage=move.Split(“|”)[1]; //循环遍历xml并按名称查找正确的元素 foreach(xmlMoves.substands(“Move”)中的XElement xmlMove) { if(xmlMove.Element(“Name”).Value==moveName) { xmlMove.Element(“损坏”)。值=移动损坏; } } } //保存回xml文件。 保存(文件路径); }
元素。不要将Xml文件视为文本文件。使用Xml读取器之一并将其作为Xml进行操作。联机示例很多。尽管OP要求进行字符串操作…但基于Xml的方法将是逻辑和c这是一个正确的解决方案。如果他们只是想替换字符串,而不需要对XML做任何其他事情,那么解析任何东西似乎都太过分了。我只需要做一次,我确实需要更新一个文本文件一次,用于另一个程序,我认为编辑它基于文本要比花费大量时间更容易ime也在学习如何使用XML