我想浏览一个文本文件并删除字符串的特定部分。 在这种情况下,我想删除路径:
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”开头的下一行并再次开始这个过程......
答案 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>