在第一个“_”之后删除文件名中的所有字符
我想删除这些采购订单文件名(以下几个示例),以便省略第一个“_”后面的所有内容。在第一个“_”之后删除文件名中的所有字符
INCOLOR_fc06_NEW.pdf 保持:INCOLOR(写这DB作为卖方ID)删除:_fc08_NEW.pdf
NORTHSTAR_sc09.xls 保持:NORTHSTAR(写这DB作为卖方ID)删除:_sc09.xls
我们的场景:管理员正在将这些文件上传到我们的Intranet Web服务器,以使它们可用于下载/查看等。我使用Brettles NeatUpload,并为每个上传的文件,将文件属性写入PO表(sql 2000)。文件名的第一部分将作为VendorID写入数据库。
这些文件的命名约定是一致的,因为文件的第一部分始终是供应商名称(或供应商ID)后跟一个“_”,然后其他不可预知的字符用于标识采购订单的类型,然后文件扩展名 - 它始终是.xls,.XLS,.PDF或.pdf。
我试过TrimEnd - 但是你必须提供的字符数组最终会变长,并且可能与我想保留的文件名部分发生冲突。我有一种感觉,我没有正确使用TrimEnd。
什么是最好的方式来使用string.TrimEnd(或在C#中的任何其他字符串操作),将删除第一个“_”后的所有字符?
我可能会冒犯反正规游戏大厅,但我在这里(躲避):
string stripped = Regex.Replace(filename, @"(?<=[^_]*)_.*",String.Empty);
此代码将除去第一个'_'
之后的所有额外字符,除非字符串中没有'_'
(然后它将仅返回原始字符串)。
这是一行代码。它比更复杂的IndexOf()算法慢,但是当用于代码的非性能敏感部分时,这是一个很好的解决方案。
让您的火焰喷射器了...
String s = "INCOLOR_fc06_NEW.pdf";
int index = s.IndexOf("_");
return index >= 0 ? s.Substring(0,index) : s;
public string StripOffStuff(string sInput)
{
int iIndex = sInput.IndexOf("_");
return (iIndex > 0) ? sInput.Substring(0, iIndex) : sInput;
}
// Call it like:
string sNewString = StripOffStuff("INCOLOR_fc06_NEW.pdf");
TrimEnd删除字符串的结尾空格和标点符号,也不会帮助你在这里。了解更多关于TrimEnd这里: http://msdn.microsoft.com/en-us/library/system.string.trimend.aspx
Bnaffas代码(有小的调整):
String fileName = "INCOLOR_fc06_NEW.pdf";
int index = fileName.IndexOf("_");
return index >= 0 ? fileName.Substring(0, index) : fileName;
如果你想要做的与其他部件的东西,你可以使用一个拆分
string fileName = "INCOLOR_fc06_NEW.pdf";
string[] parts = fileName.Split('_');
我会与子串的方法去,但轮出可用的解决方案在这里只是一个有趣的LINQ方法:
string filename = "INCOLOR_fc06_NEW.pdf";
string result = new string(filename.TakeWhile(c => c != '_').ToArray());
它会返回如果找不到下划线,则为原始字符串。
为了配合所有的“另类”的解决方案,这里就是我想的(子)之后第二个:
string filename = "INCOLOR_fc06_NEW.pdf";
string stripped = filename.Split('_')[0];
你说你要第一个下划线后删除一切,但什么下划线本身? – 2009-07-11 21:21:16
是的,我需要删除第一个下划线。那只会让我看到供应商的名字 - 这正是我需要的。 – Doug 2009-07-11 21:42:13