【问题标题】:Replace part of text in a dynamic string替换动态字符串中的部分文本
【发布时间】:2010-10-27 18:36:59
【问题描述】:

我们以这个字符串为例:

D:/firstdir/Another One/and 2/bla bla bla/media/reports/Darth_Vader_Report.pdf

我想剪掉路径的第一部分:

D:/firstdir/Another One/and 2/bla bla bla

并将其替换为**../**,并保留路径的第二部分 (media/reports/Darth_Vader_Report.pdf)

如果我知道它的长度或大小,我可以使用ReplaceSubstring。但是由于字符串的第一部分是动态的,我该怎么做呢?


更新

在 StriplingWarrior 提出问题后,我意识到我可以更好地解释。

目标是替换/media 后面的所有内容。 “媒体”目录是静态的,并且始终是路径的决定性部分。

【问题讨论】:

  • 您如何确定要替换路径的哪一部分?解释一下逻辑:是否一切都取决于你第一次看到“/media/”这个词?
  • 我已经更新了我的问题,希望对您有所帮助。 :)

标签: c# asp.net regex string-math


【解决方案1】:

使用正则表达式:

Regex r = new Regex("(?<part1>/media.*)");
var result = r.Match(@"D:/firstdir/Another One/and 2/bla bla bla/media/reports/Darth_Vader_Report.pdf");
if (result.Success)
{
    string value = "../" + result.Groups["part1"].Value.ToString();
    Console.WriteLine(value);
}

祝你好运!

【讨论】:

  • 太棒了!做到了!! :) 非常感谢。
【解决方案2】:

你可以这样做:

string fullPath = "D:/firstdir/Another One/and 2/bla bla bla/media/reports/Darth_Vader_Report.pdf"
int index = fullPath.IndexOf("/media/");
string relativePath = "../" + fullPath.Substring(index);

我还没有检查过,但我认为它应该可以解决问题。

【讨论】:

  • 通常情况下,我会选择Regex 解决方案,但这次我将支持简单的.IndexOf(...)。 +1
  • 这很容易出现一些问题,例如您正在寻找的“媒体”之前的某个地方的“中级”一词。您可能想要使用 LastIndexOf。很大程度上取决于您可以依赖多少字符串;到目前为止,我们只知道“媒体”。
  • @Jason:这并不完美。但我不认为它会匹配“中级”这个词,因为我检查“/媒体”的索引 - 即包括斜杠。我还会更新我的答案以检查“/media/”,这应该会更安全一些。
  • 由于您的解决方案效果很好,我决定给您+1。但最终,我决定使用 Homam 解决方案。还是谢谢你:)
【解决方案3】:

我会写下面的正则表达式模式,

String relativePath = String.Empty;
Match m = Regex.Match("Path", "/media.*$");
if (m.Success)
{
relativePath = string.Format("../{0}", m.Groups[0].Value);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2012-07-17
    • 2017-08-30
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多