从文本文件中的任何位置获取价值

时间:2016-11-30 09:12:50

标签: c# linq

我有一个值“md5:[md5 value here]”,它出现在一行中间大约15行到文本文件中。

IE:

File was uploaded successfully, md5: [md5_value_would_be_here]

我无法控制txt文件内容,因此无法将值写入新行,然后将其拉出来。

在c#中,我将如何获得md5的值:(我知道批量生产我可以使用查找和替换,但完全消除了如何在c#中执行此操作)。

任何帮助表示赞赏:)

到目前为止,我正在使用的是什么...

var data = File
                .ReadAllLines("file.txt")
                .Select(x => x.Split('='))
                .Where(x => x.Length > 1)
                .ToDictionary(x => x[0].Trim(), x => x[1]);

string serverFileMD5 = data["md5"];

由于

更新

以下未取得成功,

String data = File.ReadAllText("File.txt");
            String pattern = "md5: ([a-zA-Z0-9]*) ";
            Regex reg = new Regex(pattern);
            Match m = reg.Match(data);
            if (m.Success)
            {
                Group g = m.Groups[1]; // This should be the hash
                Console.WriteLine("value of g: " + g);
                serverFileMD5 = g.Value;
            }

2 个答案:

答案 0 :(得分:5)

可能最简单的方法是使用Regex。首先,我可能会将整个文件读成一个字符串:

String content = File.ReadAllText()

然后你可以使用以下几行:

String pattern = "md5: \[([a-zA-Z0-9]*)\]";
Regex reg = new Regex(pattern);
Match m = reg.Match(content);
if(m.Success) {
    Group g = m.Groups[1]; // This should be the hash
    String hash = g.Value;
}

这假设您的哈希包含大写字符,小写字符和数字。它的工作原理如下:

md5: - 字面上查找md5:以启动匹配

\[ - 查找空心括号,\用于转义

(...) - 创建匹配组,此处匹配的位将位于m.Groups[1]中,以便更轻松地访问结果。

[a-zA-Z0-9]* - 这是说匹配任何字母字符或数字的漫长道路。请注意,*表示匹配其中的许多,没有它,它只是拾取第一个字符。

\] - 只需寻找一个关闭括号,再次进行转义

如果您需要有关Regex的更多信息来帮助您修改捕获,我建议您查看备忘单,例如Regexlib.com

答案 1 :(得分:1)

假设你只想找到一个长度为32的MD5哈希值,它始终跟在文本md5:之后(包括空格),这个简单的解决方案就足够了:

var data = File.ReadAllLines(@"C:\somewhere\DummyTextWithHash.txt");
var lineWithMd5 = data.First(line => line.Contains("md5: "));
var md5StartPos = lineWithMd5.IndexOf("md5:").Dump();
var md5Value = lineWithMd5.Substring(md5StartPos + 5, 32);

这是相当明确的,并且应该完全不言自明。

有一点需要注意:如果文件中没有找到MD5值({em> data.First(...) ),Sequence contains no matching element..可能会抛出异常。如果您不确定文件中是否始终存在MD5,请在其中使用FirstOrDefault(),并在尝试提取值之前检查它是否返回任何内容(如果该值将返回null,则没找到匹配)。