在C#中提取文本文件的特定部分
本文关键字:定部 文件 取文本 提取 | 更新日期: 2023-09-27 18:19:55
我通常逐行将文本文件中的一些字符串添加到列表或数组中,尽管我现在在文本文件中使用"#"作为分隔符。使用两个"#"符号作为断点,如何将"softpedia.com"answers"download.com"这两个字符串读取到列表中?记住两个散列之间可能有或多或少的字符串
例如
# Internal Hostnames
softpedia.com
download.com
# External Hostnames
预期输出:
softpedia.com
download.com
class Program
{
static void Main()
{
using (var reader = File.OpenText("test.txt"))
{
foreach (var line in Parse(reader))
{
Console.WriteLine(line);
}
}
}
public static IEnumerable<string> Parse(StreamReader reader)
{
string line;
bool first = false;
while ((line = reader.ReadLine()) != null)
{
if (!line.StartsWith("#"))
{
if (first)
{
yield return line;
}
}
else if (!first)
{
first = true;
}
else
{
yield break;
}
}
}
}
如果你想把它们放在一个列表中:
using (var reader = File.OpenText("test.txt"))
{
List<string> hostnames = Parse(reader).ToList();
}
将其读取到缓冲区中,然后让regex完成工作。
string input = @"
# Internal Hostnames
softpedia.com
download.com
# External Hostnames
";
string pattern = @"^(?!#)(?<Text>[^'r's]+)(?:'s?)";
Regex.Matches(input, pattern, RegexOptions.Multiline)
.OfType<Match>()
.Select (mt => mt.Groups["Text"].Value)
.ToList()
.ForEach( site => Console.WriteLine (site));
/* Outputs
softpedia.com
download.com
*/
听起来您想要读取一组#起始行之间的所有行。如果是,请尝试以下
List<string> ReadLines(string filePath) {
var list = new List<string>();
var foundStart = false;
foreach (var line in File.ReadAllLines(filePath)) {
if (line.Length > 0 && line[0] == '#') {
if (foundStart) {
return list;
}
foundStart = true;
} else if (foundStart) {
list.Add(line);
}
}
return line;
}