Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除字符串的特定部分_C#_.net_String_Replace - Fatal编程技术网

C# 删除字符串的特定部分

C# 删除字符串的特定部分,c#,.net,string,replace,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 "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

我尝试了以下方法:(给定包含整个文本的字符串s)

并重复此功能以删除“文件”和以下反斜杠之间的部分


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

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

var strings=lines.Split(new[]{Environment.NewLine},StringSplitOptions.None);
var replacedStrings=新列表();
foreach(字符串中的变量s)
{       
替换字符串;
如果(s.StartsWith(“文件”))
{
var sWithoutFile=s.Substring(5);
替换=s.子字符串(0,6)+
子字符串(sWithoutFile.LastIndexOf(“\\”)+1);
}
其他的
{
替换=s;
}
替换字符串。添加(替换);
}   
var result=string.Join(Environment.NewLine,replacedStrings);

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

var strings=lines.Split(new[]{Environment.NewLine},StringSplitOptions.None);
var replacedStrings=新列表();
foreach(字符串中的变量s)
{       
替换字符串;
如果(s.StartsWith(“文件”))
{
var sWithoutFile=s.Substring(5);
替换=s.子字符串(0,6)+
子字符串(sWithoutFile.LastIndexOf(“\\”)+1);
}
其他的
{
替换=s;
}
替换字符串。添加(替换);
}   
var result=string.Join(Environment.NewLine,replacedStrings);

假设您的行始终以
文件“
开头,并以
波“
结尾,您可以使用
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
结果:

FILE "Charles Lloyd\[2010] Mirror\01. I Fall In Love Too Easily.wav" WAVE
FILE "01. I Fall In Love Too Easily.wav" 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
结果:

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

您可以在此

中阅读有关此函数的更多信息,使用字符分割数组,并将数组中的最后一个元素存储回字符串

例如,类似这样的事情:

array = file.split('\')

file = array[array.size - 1];

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

例如,类似这样的事情:

array = file.split('\')

file = array[array.size - 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");
    }
}
使用系统;
使用System.Text.RegularExpressions;
类移除路径
{
静态void Main()
{
字符串输入=@“
表演者“查尔斯·劳埃德”
标题“镜像”
文件“查尔斯·劳埃德\[2010]Mirror\01.我太容易坠入爱河了。wav”“WAVE”
轨道01音频
文件“Charles Lloyd\[2010]Mirror\02.Go Down Moses.wav”“WAVE”;
字符串测试=@“
表演者“查尔斯·劳埃德”
标题“镜像”
文件“”01。我太容易坠入爱河。wav“”WAVE
轨道01音频
文件“02.Go Down Moses.wav”“WAVE”;

正则表达式rgx=newregex(@“(?正则表达式怎么样

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");
    }
}
使用系统;
使用System.Text.RegularExpressions;
类移除路径
{
静态void Main()
{
字符串输入=@“
表演者“查尔斯·劳埃德”
标题“镜像”
文件“查尔斯·劳埃德\[2010]Mirror\01.我太容易坠入爱河了。wav”“WAVE”
轨道01音频
文件“Charles Lloyd\[2010]Mirror\02.Go Down Moses.wav”“WAVE”;
字符串测试=@“
表演者“查尔斯·劳埃德”
标题“镜像”
文件“”01。我太容易坠入爱河。wav“”WAVE
轨道01音频
文件“02.Go Down Moses.wav”“WAVE”;

正则表达式rgx=新正则表达式(@“(
IndexOf
方法接受第二个参数,该参数告诉它从何处开始搜索匹配字符串。如果行始终以
File
开始,以
WAVE
结束,您可以看到我的答案。
IndexOf
方法接受第二个参数,该参数告诉它从何处开始搜索匹配字符串ng.如果这一行总是以
File
开头,以
WAVE
结尾,你可以看到我的答案。但是有几行包含“File….\text\text\song”,那么我如何为每一行包含“File”@Csharpest是的,你是对的,对不起,我已经更改了解决方案。“已替换”在这个上下文中是一个字符串吗?是的,结果字符串。好的,这个例子指的是一个包含文件或不包含文件的行,对吗?但我要处理的是一个包含所有这些行的字符串。我如何遍历整个字符串,找到包含“文件”的部分?但是有几行包含“FILE…\text\text\song”,那么我如何才能找到包含单词“FILE”@Csharpest的每一行的内容是的,你是对的,对不起,我已更改了解决方案。”替换为在这个上下文中是一个字符串吗?是的,结果字符串。好的,这个例子指的是一个包含文件或不包含文件的单行,对吗?但我要处理的是一个包含所有这些行的字符串。我如何遍历整个字符串,找到包含“文件”的部分?