我如何从文本文件读取所有行解析特定字符串
本文关键字:字符串 文本 读取 文件 | 更新日期: 2023-09-27 17:49:27
在每一行中,我想解析标签
<li>602 — <a href="/w/index.php?title=Text602&action=edit&redlink=1" class="new" title="Text602 (page does not exist)">Text602</a> document</li>
<li>ABW — <a href="/wiki/AbiWord" title="AbiWord">AbiWord</a> Document</li>
我想解析第一行的602和第二行的ABW。我想做的是:
private void ParseFilesTypes()
{
string[] lines = File.ReadAllLines(@"E:'New folder (44)'New Text Document.txt");
foreach (string str in lines)
{
int r = str.IndexOf("<li>");
if (r >= 0)
{
int i = str.IndexOf(" -", r + 1);
if (i >= 0)
{
int c = str.IndexOf(" -", i + 1);
if (c >= 0)
{
i++;
MessageBox.Show(str.Substring(i, c - i));
}
}
}
}
}
但是c总是-1
我认为这是一种情况下,regex将是有用的(除非没有li
属性):
var regex = new Regex("^<li>(.+) —");
foreach (string str in lines)
{
var m = regex.Match(str);
if (m.Success)
MessageBox.Show(m.Groups[1].Value);
}
实际上,您的问题是您正在读取具有不正确编码的文件。在文件—
中有一个特殊字符,而不是-
。因此,您需要纠正代码中的这个字符,并以正确的编码读取文件。如果你用错误的编码调试你的字符串读取,你会看到一个黑菱形而不是—
。
另外,您需要删除—
之前的空格或将i + 1
替换为i
;
private static void ParseFilesTypes()
{
string sampleFilePath = @"log.txt";
string[] lines = File.ReadAllLines(@"log.txt", Encoding.GetEncoding("windows-1252"));
foreach (string str in lines)
{
int r = str.IndexOf("<li>");
if (r >= 0)
{
int i = str.IndexOf(" —", r + 1);
if (i >= 0)
{
int c = str.IndexOf(" —", i);
if (c >= 0)
{
i++;
int startIndex = r + "<li>".Length;
int length = i - startIndex - 1;
string result = str.Substring(r + "<li>".Length, length);
MessageBox.Show(result);
}
}
}
}
}