【问题标题】:Troubles with finding/replacing in string在字符串中查找/替换的问题
【发布时间】:2018-10-02 17:53:41
【问题描述】:

我在查找/替换字符串中的值时遇到了一些麻烦。不知道我是否应该在 RegEx 中执行此操作,或者 C# 有一些漂亮的功能可以使其工作。正则表达式让我头疼。

问题:

<doc name="tester" value="p1,p2,p3" />

所以我想要“值”(p1,p2,p3)并将其替换为当前值+“,p4”。

任何帮助appriciated。

【问题讨论】:

  • 这看起来像 XML 或可能的 HTML,您应该使用库来解析这些值(.NET Framework 的内置 XML 工具或 HTML 使用 HtmlAgilityPack)
  • 你能显示你想要的起始行和最后一行吗,我不明白你的解释
  • 你提到正则表达式“让我头疼”。到目前为止,您尝试过什么?
  • 您不清楚您的要求:您只想为带有name="tester" 或每个属性value="p1,p2,p3" 的“doc”标签添加“p4”?如果有&lt;doc name="tester" value="p1,p2,p3,p4,p5" /&gt; 应该变成&lt;doc name="tester" value="p1,p2,p3,p4,p5,p6" /&gt; 吗?
  • @maccettura。看起来像......但它不是。

标签: c# string replace find


【解决方案1】:

虽然您对正则表达式感到头疼,但实际上使用以下正则表达式非常简单:

@"(?<=value=\"")[^""]+"

它首先查找“value="”,然后匹配所有字符,直到结尾的双精度 quote

string test = @"<doc name=""tester"" value=""p1,p2,p3"" />";
Regex regex = new Regex(@"(?<=value=\"")[^""]+");
string result = regex.Replace(test, "p1,p2,p3,p4");

// result will be: @"<doc name=""tester"" value=""p1,p2,p3,p4"" />";

编辑: 您当然可以捕获原始内容,只需调用:

string match = regex.Match(test).Value;

【讨论】:

  • 看起来不错。但是我可以“捕捉”实际价值吗?我现在不事先知道实际值是什么......只是我必须获取然后添加“,p4”的值。
  • 谢谢。出于某种原因,我无法将匹配转换为字符串……但使用了 Match.Value……而且效果非常好!然后在 RegEx.replace 中,我使用了连接的 Match.Value + ",p4"。
  • 抱歉错字,已修复。
猜你喜欢
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2015-09-22
  • 2019-06-24
相关资源
最近更新 更多