C# 线修剪。从末尾删除最后一个字符的步骤

C# 线修剪。从末尾删除最后一个字符的步骤,c#,string,trim,C#,String,Trim,有点问题。 我有这些绳子 [14]: "Care_CAR_3RD_DAY_201309177438417" [15]: "Care_201309177438417" [16]: "New_Care_201309177438417" [17]: "SMS_New_Care_20130917" 这是每天生成的文件列表,我想删除最后的数字,以便能够将每个文件名与数据库中的记录进行比较,以执行特定操作。此外,末尾的数字并不总是相同的大小。 结果将是 [14]: "Care_CAR_3RD_DAY" [

有点问题。 我有这些绳子

[14]: "Care_CAR_3RD_DAY_201309177438417"
[15]: "Care_201309177438417"
[16]: "New_Care_201309177438417"
[17]: "SMS_New_Care_20130917"
这是每天生成的文件列表,我想删除最后的数字,以便能够将每个文件名与数据库中的记录进行比较,以执行特定操作。此外,末尾的数字并不总是相同的大小。 结果将是

[14]: "Care_CAR_3RD_DAY"
[15]: "Care"
[16]: "New_Care"
[17]: "SMS_New_Care"
如果您不确定是否存在“\u”,则可以检查它:

test = test.IndexOf('_') > -1 ? test.Remove(test.LastIndexOf('_')) : test;
你可以使用正则表达式

  var newString = Regex.Replace(inputString, @"\d*", string.empty);


Input: Care_CAR_3RD_DAY_201309177438417
Result: Care_CAR_3RD_DAY_

虽然jyparask的答案是有效的,但如果输入像这样的内容,就会失败

安全的方法是

string test = "Care_CAR_3RD_DAY_201309177438417";
test = test.TrimEnd(new char[]{'_','0','1','2','3','4','5','6','7','8','9'});

//output Care_CAR_3RD_DAY
test = "Care_CAR_3RD_DAY201309177438417";
test = test.TrimEnd(new char[]{'_','0','1','2','3','4','5','6','7','8','9'});

//output Care_CAR_3RD_DAY

我就是这样设法解决的


fname.Replacefname.Split.Last.TrimEnd

在实际代码中,您希望检查LastIndexOf的返回值,以确保它不是-1如果输入类似于Care\u CAR\u 3RD\u DAY201309177438417,则您的方法将失败。@根据询问者的输入,这是正确的。以Care_CAR_第三天20130917_7438417为例,您的解决方案在这里也会失败。当我们有非常具体的规则时,是否有必要为每种情况找到解决方案?输入字符串的格式以_数字结尾,因此这是我的测试用例。在我看来,所有其他的输入都是错误的。@jyparask它不会失败的。试试看。并且字符串以_结尾。用户未定义编号。你已经假设了。第三,作为一名工程师,你需要检查所有角度。第四,如果不需要删除未排序的核心,那么只需将其从字符数组中删除即可。@None它不会失败,因为输出是Care\u CAR\u 3RD\u DAY,这意味着它修剪了比应该修剪的更多的数字。正确的结果将是Care_CAR_3RD_DAY20130917。与字符串相同。使用单个参数在内部删除,但不太可编辑。正如我前面提到的Care_CAR_3RD_DAY20130917_7438417将生成Care_CAR_3RD_DAY,这将是错误的,因为询问者只需要在最后一个破折号后修剪数字。但在我看来,重点仍然是在特定的输入中获得正确的结果,而不是在所有情况下,否则框架将有一些功能。
string test = "Care_CAR_3RD_DAY_201309177438417";
test = test.TrimEnd(new char[]{'_','0','1','2','3','4','5','6','7','8','9'});

//output Care_CAR_3RD_DAY
test = "Care_CAR_3RD_DAY201309177438417";
test = test.TrimEnd(new char[]{'_','0','1','2','3','4','5','6','7','8','9'});

//output Care_CAR_3RD_DAY