从文本文件中的任意位置获取值
我有一个值“md5:[md5 value here]”,它出现在文本文件中大约15行的中间。从文本文件中的任意位置获取值
IE:
File was uploaded successfully, md5: [md5_value_would_be_here]
我有过txt文件内容没有控制,使倾斜值写入一个新行,然后把它。 (我知道在批处理中,我可以使用查找和替换,但完全消除了如何在C#中执行它)。如何获取md5的值:
任何帮助表示赞赏:)
继承人,我使用的是什么,到目前为止...
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;
}
可能最简单的方法是使用Regex。首先我可能将整个文件读入一个字符串:
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;
}
这使得你是哈希包含的假设:
String content = File.ReadAllText()
然后,你可以沿着以下线使用的东西大写字母,小写字母和数字。它的工作原理是这样的:
md5:
- 从字面上查找md5:
开始匹配
\[
- 寻找一个开放式托架,该\
用于逃避
(...)
- 创建匹配组,位在这里匹配将在m.Groups[1]
使访问结果更容易。
[a-zA-Z0-9]*
- 这是说匹配任何字母字符或数字的很长的路要走。请注意,*
意味着匹配其中的许多,没有它,它只会拾取第一个字符。
\]
- 只需寻找闭括号,再次被转义
如果您需要了解更多的正则表达式的信息,帮助您修改捕获,我只是建议您检查出一张小抄如Regexlib.com
感谢您的支持!但是,如果括号是空格,那么正则表达式会是什么? \ s? – user2295457
@ user2295457方括号'['和']'?只需将它们与模式中的空格互换即可。空格在字面上被当作空格对待,实际上你可以在'md5:\ ['里面看到空格。 '('和')'括号需要在那里创建正则表达式匹配组,它们是特殊字符,它不会**查找原始字符串中的那些字符,因此您可以忽略它们。 – Ian
好吧,所以得到它,是正则表达式(记事本+ +没有显示文件中的一些字符,检查与普通记事本reviealed没有起始空间字符,并=尾随......只需要从左边修剪4个字符“md5:”)在我的输出字符串,我很好!非常感谢:) – user2295457
假设你只是想找个长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);
这个我这是相当明确的,而且应该希望完全不言自明。
有一点要注意,虽然:data.First(...)
可能会抛出异常,如果没有MD5值的文件(通常Sequence contains no matching element..
)中找到。如果您不确定文件中是否始终存在MD5,请使用FirstOrDefault()
代替,并在尝试提取值之前检查它是否返回任何内容(如果未找到匹配,它将返回null
)。
该代码有什么问题?你的文件的一个例子可能在这里非常有用。 – Steve
你提供的例子并不包含一个'=',但这就是你用来分割线条的东西。 –
为什么把'()'放在正则表达式中? –