删除字符串的一部分C#(FileName)

时间:2014-12-08 10:07:00

标签: c# string substring

问题:

我的文件中添加了时间戳,如下所示:

  

"演讲最终项目_20141207182834657.pptx"

  

"演讲最终项目_201412071864035.pptx"

如何删除" _date"部分来自它?

请注意,我无法计算char,因为有时日期是15 char'有时甚至更多,我需要以某种方式删除以" _20"开头的字符串的一部分。直到它到达"。" (点)或者也许有人有更好的主意。

背景

我有一个文件存储空间,在我上传文件之前,我给它一个时间戳,如下所示:

(JavaScript的)

function getDate() {
var today = new Date();
var year = today.getFullYear().toString();
var month = (today.getMonth()+1).toString();
var day = today.getDate();

if (day < 10)
    day = "0" + day.toString();
else
    day = day.toString();

var hours = today.getHours().toString();
var minutes = today.getMinutes().toString();
var seconds = today.getSeconds().toString();
var miliSecond = today.getMilliseconds().toString();


return year+month+day+hours+minutes+seconds+miliSecond;
}

从我添加到文件名的这个函数返回的是什么。

现在我想将文件返回给用户,但没有添加到文件的日期戳..

谢谢。

更新

让我给出一个疯狂的场景,有下划线&#34; _&#34;不仅在这样的日期之前:

  

&#34; presentation_final_project_201412071864035.pptx&#34;

我无法信任&#34; _&#34;的索引。因为它可以无处不在。

6 个答案:

答案 0 :(得分:3)

要提取文件部分,我将使用Path类方法更加独立于操作系统

string input = "presentation final project_20141207182834657.pptx";
string pureFile = Path.GetFileNameWithoutExtension(input);
string ext = Path.GetExtension(input);
int pos = pureFile.LastIndexOf('_');
string newFile = pureFile.Substring(0, pos) +  ext;

注意,要找到下划线,你需要从输入字符串的末尾开始,而不是从一开始就避免误报(在最后一个之前存在下划线)

唯一不确定的是在日期部分之前或之后存在下划线。如果你可以确定在日期之前总是有一个下划线,并且在日期之后没有下划线,这种方法可以完美地工作。

答案 1 :(得分:2)

这是相当微不足道的。找到字符的位置并使用Substring()构建新字符串:

string input = "presentation final project_20141207182834657.pptx";

int underscoreIndex = input.LastIndexOf("_");
int dotIndex = input.LastIndexOf(".");

string newFilename = input.Substring(0, underscoreIndex);
newFilename += input.Substring(dotIndex);

Ideone.com上查看此操作。

答案 2 :(得分:2)

使用string.LastIndexOfstring.Remove获取文字:

string text = "presentation final project_20141207182834657.pptx";

int indexOfUnderscore = text.LastIndexOf('_'); // find the position of _
int indexOfPeriod = text.LastIndexOf('.', indexOfUnderscore); // find the position of .

// find remove the text between _ and .
string newText = text.Remove(indexOfUnderscore, indexOfPeriod - indexOfUnderscore);

答案 3 :(得分:0)

string r =&#34; presentation final project_2011207182834657.pptx&#34 ;;

        string part1 = r.Substring(0, r.IndexOf(@"_"));

        string part2 = r.Substring(r.IndexOf(@"."), 5);

        Console.WriteLine(part1);

        Console.WriteLine(part2);

        Console.WriteLine(part1 + part2);

答案 4 :(得分:-1)

这是一个正则表达式解决方案

string file = "presentation final project_201412071864035.pptx";
var result = Regex.Replace(file, @"(.*)(_[\d]{15,})(.*)$", "$1$3");

答案 5 :(得分:-1)

string oldpath = "presentation_final_project_201412071864035.pptx";
string date = oldpath.Split('_').LastOrDefault().Split('.').FirstOrDefault();
string newpath = oldpath.Replace("_" + date, "");