是否可以从c#中的文本文件中获取指定String后面的String字符

问题描述 投票:0回答:2

这是我的文本文件

john monday 500 sara monday 600 sunny monday 1200 john monday 500 sara monday 300 sunny monday 2200 john monday 400 sara monday 100 sunny monday 500 john monday 520 sara monday 600 sunny monday 10 john monday 990 sara monday 850 sunny monday 1000 john monday 300 sara monday 200 sunny monday 

是否有任何方式我可以读取数据并将其保存在SARA名称之后的字符串中,例如从上面的文本文件中我只需要在SARA名称后面的数字,SUBSTRING没有帮助,因为我必须指定那边的数字位置。不知道如何处理它,我现在已经做了一个小时左右

请不要嘲笑我的尝试:(

using (StreamReader readtext = new StreamReader("F:\\spokeo\\2.txt"))
     {
                string readMeText = readtext.ReadLine();
                Console.WriteLine(readMeText);

                int index1 = Convert.ToInt32(readMeText.IndexOf('SARA', 0));


                Console.WriteLine("The Index Value of character 'SARA' " +
                                  "with start index 0 is " + index1);

            }
c# read-write
2个回答
2
投票

正则表达式可以帮助满足此要求。您可以使用正则表达式定义搜索模式,库将查找与模式匹配的所有结果。下面的代码找到名称“sara”之后的数字。

using System;
using System.Text.RegularExpressions;

namespace consoleapp
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "john monday 500 sara monday 600 sunny monday 1200 john monday 500 sara monday 300 sunny monday 2200 john monday 400 sara monday 100 sunny monday 500 john monday 520 sara monday 600 sunny monday 10 john monday 990 sara monday 850 sunny monday 1000 john monday 300 sara monday 200 sunny monday";
            var saraPattern = new Regex(@"sara\s\w+\s\d+");
            var numberPattern = new Regex(@"[\d\.\,]+");
            var matches = saraPattern.Matches(text);
            foreach (Match match in matches)
            {
                var numbermatch = numberPattern.Match(match.Value);
                var number = float.Parse(numbermatch.Value);
                Console.WriteLine(number);
            }
            Console.ReadKey();
        }
    }
}

至于模式的解释:

saraPattern(sara\s\w+\s\d+)声明:找到一个字符序列,以“sara”开头,然后是空格字符(\s),然后是一个或多个单词字符(\w+),然后再返回一个退格(\s),然后是一个或更多十进制字符(\ d +)

这种模式会找到像“sara monday 600”这样的序列

numberPattern([\d\.\,]+)声明:找到包含以下任何一个或多个字符的字符序列:decimal(\d)或逗号(\,)或dot(\.

该模式将从先前找到的序列中提取数字(例如600)(例如“sara monday 600”)

您可以在维基百科(https://en.wikipedia.org/wiki/Regular_expression)上检查正则表达式,或者您可以按照本网站上的基本教程进行检查:https://regexone.com/


0
投票

您的代码中存在错误。

你的这一行:

int index1 = Convert.ToInt32(readMeText.IndexOf('SARA',0));

应该:

int index1 = Convert.ToInt32(readMeText.IndexOf(“sara”,0));

注释:1。你需要使用“(引号)而不是'(撇号)2。你的字符串中没有”SARA“但是”sara“就是为什么你现在得到-1的索引。

请告诉我它是否对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.