Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将正则表达式匹配转换为字符串c#_C#_Regex_String_Web Scraping_.net Core - Fatal编程技术网

如何将正则表达式匹配转换为字符串c#

如何将正则表达式匹配转换为字符串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_

我制作了一个程序,从日历网站上获取大量文本,搜索事件标签,并将其放入文本文件中。我添加了一个函数,这样你可以在过去的很多天里进行查询,我还想添加一个搜索函数,这样你就可以搜索标签了。我想使用一个简单的String.Contains(),但是输出标记是正则表达式匹配项,所以我需要转换它们

我的代码:

使用系统;
使用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,所以使用一个。