如何将正则表达式匹配转换为字符串c#
我制作了一个程序,从日历网站上获取大量文本,搜索事件标签,并将其放入文本文件中。我添加了一个函数,这样你可以在过去的很多天里进行查询,我还想添加一个搜索函数,这样你就可以搜索标签了。我想使用一个简单的String.Contains(),但是输出标记是正则表达式匹配项,所以我需要转换它们 我的代码:如何将正则表达式匹配转换为字符串c#,c#,regex,string,web-scraping,.net-core,C#,Regex,String,Web Scraping,.net Core,我制作了一个程序,从日历网站上获取大量文本,搜索事件标签,并将其放入文本文件中。我添加了一个函数,这样你可以在过去的很多天里进行查询,我还想添加一个搜索函数,这样你就可以搜索标签了。我想使用一个简单的String.Contains(),但是输出标记是正则表达式匹配项,所以我需要转换它们 我的代码: 使用系统; 使用System.Linq; 使用系统诊断; 使用系统线程; Net系统; 使用System.IO; 使用System.Text.RegularExpressions; 名称空间ESEL_
使用系统;
使用System.Linq;
使用系统诊断;
使用系统线程;
Net系统;
使用System.IO;
使用System.Text.RegularExpressions;
名称空间ESEL_
{
班级计划
{
静态void Main(字符串[]参数)
{
int queryResults=0;
秒表秒表=新秒表();
秒表。开始();
Console.WriteLine(“您希望返回多少天?”);
字符串userInput=Console.ReadLine();
WriteLine(“您想要搜索什么?”);
字符串userInput2=Console.ReadLine();
int result=Int32.Parse(userInput);
for(int i=0;i
大块文本:
我希望有人能帮助我
String tags = "\"tags\":\"";
String endTags = "\",";
Regex regex = new Regex($"{tags}(.*?){endTags}");
MatchCollection matches = regex.Matches(site);
您的上述代码将只获取“tags:”和“,”之间的字符串,即从json字符串获取您的tags属性。因此,匹配项
将包含来自标记的子字符串
您可以创建类并将大块文本反序列化到该类,在linq的帮助下,您可以通过标记进行搜索,并将整个对象写入文件中
作为替代解决方案,我对您的代码进行了一些修改。请在下面查看
int queryResults = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Console.WriteLine("How many days do you want to go back?");
String userInput = Console.ReadLine();
Console.WriteLine("What do you want to search for?");
String userInput2 = Console.ReadLine();
int result = Int32.Parse(userInput);
for (int i = 0; i < result; i++)
{
DateTime somePreviousDay = DateTime.Now.Date.AddDays(-i);
String somePreviousDayString = somePreviousDay.ToString("dd.MM.yyyy");
Console.WriteLine(somePreviousDayString);
WebClient client = new WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string site = client.DownloadString($"https://esel.at/api/termine/data?date={somePreviousDayString}&selection=false");
var siteData = JToken.Parse(site);
var termineList = siteData["termine"].Value<JArray>();
var searchResults = termineList.Where(x => x.SelectToken("tags").Value<string>().Contains(userInput2));
foreach (var searchResult in searchResults)
{
string dataToWrite = JsonConvert.SerializeObject(searchResult);
using (System.IO.StreamWriter file =
new System.IO.StreamWriter(@"eselTags.txt", true))
{
file.WriteLine(searchResult);
queryResults++;
}
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Console.WriteLine($"Time taken: " + elapsedTime);
Console.WriteLine($"Found tags: " + queryResults);
}
int queryResults=0;
秒表秒表=新秒表();
秒表。开始();
Console.WriteLine(“您希望返回多少天?”);
字符串userInput=Console.ReadLine();
WriteLine(“您想要搜索什么?”);
字符串userInput2=Console.ReadLine();
int result=Int32.Parse(userInput);
for(int i=0;ix.SelectToken(“标记”).Value()包含(userInput2));
foreach(searchResults中的var searchResult)
{
字符串dataToWrite=JsonConvert.SerializeObject(searchResult);
使用(System.IO.StreamWriter)文件=
新System.IO.StreamWriter(@“eselTags.txt”,true))
{
file.WriteLine(搜索结果);
queryResults++;
}
}
秒表;
TimeSpan ts=秒表。已用时间;
string elapsedTime=string.Format(“{0:00}:{1:00}:{2:00}.{3:00}”,
时,分,秒,
ts.毫秒/10);
Console.WriteLine($”所用时间:“+elapsedTime”);
Console.WriteLine($”找到标记:“+queryResults”);
}
您可以使用匹配.Value.Contains(userInput2)
。或者更好地将userInput2
合并到正则表达式模式本身中。编辑:我刚刚检查了链接,看起来“大块文本”是JSON,所以使用一个。