是否可以从c#中的文本文件中获取指定字符串后字符串的字符
Is it possible to get the characters of String after a specified String from a text file in c#
这是我的文本文件
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 没有帮助,因为我必须在那边指定数字的位置。不知道如何处理它,我已经完成 google 大约一个小时
请不要嘲笑我的尝试:(
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);
}
正则表达式可以帮助满足这一要求。您可以使用正则表达式定义搜索模式,库将找到与该模式匹配的所有结果。
下面的代码查找名称 "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
”开头然后是 space 字符的字符序列(\s
) 然后跟一个或多个单词字符 (\w+
) 然后再跟一个 backspace (\s
) 然后跟一个或多个小数字符 (\ d+)
此模式将找到类似 "sara monday 600"
的序列
numberPattern ([\d\.\,]+
) 声明:查找包含一个或多个以下任一字符的字符序列:十进制 (\d
) 或逗号 (\,
) 或点 (\.
)
此模式将从先前找到的序列(例如 "sara monday 600")中提取数字(例如 600)
您可以在维基百科上查看正则表达式 (https://en.wikipedia.org/wiki/Regular_expression) or you can follow a basic tutorial on this site: https://regexone.com/
您的代码中有错误。
你这行:
int index1 = Convert.ToInt32(readMeText.IndexOf('SARA', 0));
应该是:
int index1 = Convert.ToInt32(readMeText.IndexOf("sara", 0));
评论:
1.您需要使用“(引号)而不是'(撇号)
2. 你的字符串中没有 "SARA" 但 "sara" 这就是你现在得到 -1 索引的原因。
如果对你有帮助,请告诉我!
这是我的文本文件
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 没有帮助,因为我必须在那边指定数字的位置。不知道如何处理它,我已经完成 google 大约一个小时
请不要嘲笑我的尝试:(
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);
}
正则表达式可以帮助满足这一要求。您可以使用正则表达式定义搜索模式,库将找到与该模式匹配的所有结果。 下面的代码查找名称 "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
”开头然后是 space 字符的字符序列(\s
) 然后跟一个或多个单词字符 (\w+
) 然后再跟一个 backspace (\s
) 然后跟一个或多个小数字符 (\ d+)
此模式将找到类似 "sara monday 600"
的序列numberPattern ([\d\.\,]+
) 声明:查找包含一个或多个以下任一字符的字符序列:十进制 (\d
) 或逗号 (\,
) 或点 (\.
)
此模式将从先前找到的序列(例如 "sara monday 600")中提取数字(例如 600)
您可以在维基百科上查看正则表达式 (https://en.wikipedia.org/wiki/Regular_expression) or you can follow a basic tutorial on this site: https://regexone.com/
您的代码中有错误。
你这行:
int index1 = Convert.ToInt32(readMeText.IndexOf('SARA', 0));
应该是:
int index1 = Convert.ToInt32(readMeText.IndexOf("sara", 0));
评论: 1.您需要使用“(引号)而不是'(撇号) 2. 你的字符串中没有 "SARA" 但 "sara" 这就是你现在得到 -1 索引的原因。
如果对你有帮助,请告诉我!