提取大段文字中的特殊段落

1:控制台

using ScreenFile.Script;
using System;
using System.Collections.Generic;

namespace ScreenFile
{
class Program
{
public static FileUtil fileUtil;
public static Command command;
public static ScreenText screen;

private static string inputValue;

private static void Main(string[] args)
{
fileUtil = new FileUtil();
command = new Command();
screen = new ScreenText();

while (inputValue != "Close")
{
inputValue = Console.ReadLine();
if (command.Check(inputValue))
{
Do_Command();
}
else if (screen.Check(inputValue))
{
Do_ScreenText();
}
}
}

private static void Do_Command()
{
command.ExecutiveCommand(inputValue);
}

private static void Do_ScreenText()
{
List<string> temp = screen.GetResult(inputValue);
for (int i = 0; i < temp.Count; i++)
{
Console.WriteLine(temp[i]);
}
}

public static void Do_Screen(string content)
{
if (screen.Check(content))
{
List<string> temp = screen.GetResult(content);
for (int i = 0; i < temp.Count; i++)
{
Console.WriteLine(temp[i]);
}
}
}
}
}

2:命令管理

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ScreenFile.Script
{
class Command
{
private Regex regex;

public Command()
{
regex = new Regex("^@.*");
}

public bool Check(string command)
{
return regex.IsMatch(command);
}

public void ExecutiveCommand(string command)
{
command = regex.Match(command).Value.Trim();
string[] cmds = command.Split(':');
switch (cmds[0])
{
case "@Key":
Program.screen.ChangeRegex(cmds[1], cmds[2]);
break;
case "@End":
Program.screen.suffixName = cmds[1] == "true";
break;
case "@File":
string content = Program.fileUtil.Get_FileContent(cmds[1]);
Program.Do_Screen(content);
break;
default:
break;
}
}
}
}

3:读取本地文本

using System.IO;

namespace ScreenFile.Script
{
class FileUtil
{
public string Get_FileContent(string path)
{
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
{
StreamReader sr = new StreamReader(fs);
string content = sr.ReadToEnd();
sr.Close();
return content;
}
}
}
}

4:正则匹配

using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace ScreenFile.Script
{
class ScreenText
{
public string key_start = "https://";
public string key_end = ".html";
public bool suffixName;

private Regex regex;
private List<string> result;

public ScreenText()
{
string match = string.Format("(?<={0}).*?(?={1})", key_start, key_end);
regex = new Regex(match);
result = new List<string>();
}

public void ChangeRegex(string start, string end)
{
if (!string.IsNullOrEmpty(start))
key_start = start;
if (!string.IsNullOrEmpty(end))
key_end = end;
string match = string.Format("(?<={0}).*?(?={1})", key_start, key_end);
regex = new Regex(match);
}

public bool Check(string infomation)
{
return regex.IsMatch(infomation);
}

public List<string> GetResult(string infomation)
{
result.Clear();
foreach (Match mch in regex.Matches(infomation))
{
if (suffixName)
{
result.Add(mch.Value.Trim() + key_end);
}
else
{
result.Add(mch.Value.Trim());
}
}
return result;
}
}
}

5:示例

@Key:a:b

@End:true

@File:xx.txt

猜你喜欢

转载自www.cnblogs.com/Joke-crazy/p/9179041.html
今日推荐