删除字符串的特定部分

时间:2016-12-18 20:44:29

标签: c# .net string replace

我想浏览一个文本文件并删除字符串的特定部分。 在这种情况下,我想删除路径:

PERFORMER "Charles Lloyd"

TITLE "Mirror"

FILE "Charles Lloyd\[2010] Mirror\01. I Fall In Love Too Easily.wav" WAVE

TRACK 01 AUDIO

FILE "Charles Lloyd\[2010] Mirror\02. Go Down Moses.wav" WAVE

PERFORMER "Charles Lloyd"

TITLE "Mirror"

FILE "01. I Fall In Love Too Easily.wav" WAVE //here are the changes

TRACK 01 AUDIO

FILE "02. Go Down Moses.wav" WAVE //here are the changes

我尝试了类似的东西:(给出包含全文的字符串s)

s = s.Remove(s.IndexOf("FILE") + 5, (s.IndexOf("\\") + 1) - s.IndexOf("FILE") - 5);

并重复此功能以删除“FILE”“和以下反斜杠

之间的部分

它正确地删除了部分,但我必须手动调整它运行此函数的次数(每行每个反斜杠运行一次)。但是这个算法缺乏灵活性,我不知道如何让它接近以“FILE”开头的下一行并再次开始这个过程......

4 个答案:

答案 0 :(得分:2)

如果您的所有文本都是一个字符串变量,您可以先拆分它,然后再替换所有字符串,然后再次连接(假设您的文本是变量lines):

var strings = lines.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
var replacedStrings = new List<string>();
foreach (var s in strings)
{       
    string replaced;
    if (s.StartsWith("FILE"))
    {
        var sWithoutFile = s.Substring(5);
        replaced = s.Substring(0, 6) +
                    sWithoutFile.Substring(sWithoutFile.LastIndexOf("\\") + 1);
    }
    else
    {
        replaced = s;
    }
    replacedStrings.Add(replaced);
}   
var result = string.Join(Environment.NewLine, replacedStrings);

答案 1 :(得分:1)

假设您的行始终以FILE "和EndsWith " WAVE开头,您可以使用System.Io.Path.GetFilename()函数来实现此目的:

If str.StartsWith("File"){

string strResult = "FILE """ + IO.Path.GetFileName(str.Substring(6,str.Length - 12)) + """ WAVE";

}

示例:

FILE "Charles Lloyd\[2010] Mirror\01. I Fall In Love Too Easily.wav" WAVE

<强>结果:

FILE "01. I Fall In Love Too Easily.wav" WAVE

您可以在此MSDN article

中详细了解此功能

答案 2 :(得分:1)

使用字符\拆分数组,并将数组中的最后一个元素存储回字符串。

例如:

array = file.split('\')

file = array[array.size - 1];

答案 3 :(得分:1)

正则表达式怎么样?

using System;
using System.Text.RegularExpressions;

class RemovePaths
{
    static void Main()
    {
        string input = @"
PERFORMER ""Charles Lloyd""

TITLE ""Mirror""

FILE ""Charles Lloyd\[2010] Mirror\01. I Fall In Love Too Easily.wav"" WAVE

TRACK 01 AUDIO

FILE ""Charles Lloyd\[2010] Mirror\02. Go Down Moses.wav"" WAVE";

        string test = @"
PERFORMER ""Charles Lloyd""

TITLE ""Mirror""

FILE ""01. I Fall In Love Too Easily.wav"" WAVE

TRACK 01 AUDIO

FILE ""02. Go Down Moses.wav"" WAVE";

        Regex rgx = new Regex(@"(?<=\"").*\\(?=.+\"")");
        string result = rgx.Replace(input, "");
        Console.WriteLine(result == test ? "Pass" : "Fail");
    }
}

RegEx细分......

(?&lt; = \&#34;&#34;)&lt; ---必须以双引号开头,但必须使用(?&lt; = ...)

排除

\&lt; ---匹配任何文本,包括&#34; \&#34;。注意:。匹配任何内容

(?=。+ \&#34;&#34;)&lt; ---至少跳过一个字符(。+),它必须以双引号结尾(\&#34;)。< / p>