C#解析出文件名的2个不同部分

时间:2017-05-18 08:05:28

标签: c# regex parsing substring

我需要解析文件名的两部分

我需要的例子是" PartOne"和" PartTwo"

所以给定的文件总是以我想要的东西开始直到一个下划线字符,然后其他部分总是以.txt结尾

PartOne_PartTwo.txt

期望的结果将是

string a = "PartOne"
string b = "PartTwo"

我试图理解像这样的一些正则表达式:/ :(不确定我喜欢正则表达式...

^"(.*?)"\s+(\d[\d.]*)$

真实的例子

waterview_111254059820170506.txt

因此(我需要解析的)结果将是

string a = "waterview"
string b = "111254059820170506"

子串或正则表达式?

3 个答案:

答案 0 :(得分:1)

使用System.IO.Path classString.Split

string[] parts = Path.GetFileNameWithoutExtension(filePath).Split('_');
string a = parts[0].Trim();
string b = parts[1].Trim();  // possible exception if there was no underscore, check parts.Length > 1

答案 1 :(得分:0)

您可以使用String.Split(https://msdn.microsoft.com/es-es/library/tabh47cf(v=vs.110).aspx

string s = "xxx_ssss";
var tokens = s.Split('_');

注意简单的引号(''),因为它是一个字符分隔符,而不是字符串。 标记的值是一个数组

tokens[0] = "xxx"
tokens[1] = "ssss"

答案 2 :(得分:0)

获取没有扩展名的文件名的最佳方法是

您可以从此系统对象中获取没有扩展名的文件名

string inputFile = @"c:\folder\partone_parttwo.ext";
string filename= System.IO.File.Path.GetFileNameWithoutExtension(inputFile);

这是一个强大而快速的算法,它可以从完整路径或仅从简单文件名中提取文件名

拆分文件名部分而不使用正则表达式 然后你可以拆分字符串

  char delimiter = '_';
  string[] filenameParts = filename.Split(delimiter);

使用正则表达式分割文件名部分:

  string pattern = "_"; 
  string[] filenameParts = Regex.Split(filename, pattern);