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的每一行的内容是的,你是对的,对不起,我已更改了解决方案。”替换为在这个上下文中是一个字符串吗?是的,结果字符串。好的,这个例子指的是一个包含文件或不包含文件的单行,对吗?但我要处理的是一个包含所有这些行的字符串。我如何遍历整个字符串,找到包含“文件”的部分?