【问题标题】:C#Regex Expression Getting certain words from a file pathC#Regex 表达式从文件路径中获取某些单词
【发布时间】:2015-05-12 03:57:19
【问题描述】:

大家好,我正在编写一个 c# 应用程序,但我似乎无法使用正则表达式作为 id 来拆分数据。

C:\Users\e014425c\Downloads\StoreData\ABE1102013.csv

在循环中存储为字符串。我想要:-

 ABE1
 10
 2013

从那里我会将单个字符串存储到 3 个数组中。 问题是,在循环中数据会改变,所以你不能使用Contains("ABE1")

我们将不胜感激!

foreach (string word in file)
{

    string testString = word;
    string firstWords = Regex.Match(testString, @"^(\w+\b.*?){6}").ToString();

    Console.Write(firstWords);
}

这就是我测试数据的方式

【问题讨论】:

  • 所以你只想要FileNameWithoutExtension?
  • 所以您只需要部分文件名(忽略路径)?规则是什么?前 4 个字符,然后是接下来的两个字符还是什么?不要让我们猜测,请准确解释您要做什么!
  • 可以用substring()函数吗,去掉分机后总会有10个字符吗?还显示了更多文件名的示例,因为您说您不能使用 Contains 方法
  • @DrKoch 是的,只是文件名的一部分,忽略了路径,前 4 个字符,然后是 2 个字符,然后是 4 个字符,然后将这些单词存储到不同的数组中 ABE1 - 在数组 1 中 10 - 在数组 2 中 2013 -在数组 3 中
  • @MethodMan C:\Users\e014425c\Downloads\StoreData\ABS1_52_2013.csv C:\Users\e014425c\Downloads\StoreData\ACE1_6_2013.csv C:\Users\e014425c\Downloads\StoreData\DBE1_7_2013 .csv 每次循环结束时字符串都会改变

标签: c# regex arraylist foreach


【解决方案1】:

首先只从路径中获取文件名:

string filename = File.FilenameWithoutExtension(path);

然后你想要的字符用SubString():

string a1 = filename.SubString(0, 4);
string a2 = filename.SubString(4, 2);
string a3 = filename.SubString(6, 4);


编辑

对于一般模式“ABC1_xy_YYYY”,最好使用下划线作为分隔符:

 string[] field = filename.Split('_');
 a1 = field[0];
 ...

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2011-03-08
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多