C# 根据具体要求拆分我的字符串
我编写了一个小方法,可以从字符串中提取某些信息。此类字符串的一个示例是C# 根据具体要求拆分我的字符串,c#,parsing,C#,Parsing,我编写了一个小方法,可以从字符串中提取某些信息。此类字符串的一个示例是 "Author: rajdra1 Subject: Sticky Note Date: 09-08-2018 11:06:56" 现在,我需要从这个字符串到我的字符串数组中的某些信息,例如作者、主题、日期 我的方法- Public void SplitString() { string input = "Author: rajdra1 Subject: Sticky Note Date: 09-08-2018
"Author: rajdra1 Subject: Sticky Note Date: 09-08-2018 11:06:56"
现在,我需要从这个字符串到我的字符串数组中的某些信息,例如作者、主题、日期
我的方法-
Public void SplitString()
{
string input = "Author: rajdra1 Subject: Sticky Note Date: 09-08-2018
11:06:56";
string[] result = input.Split(new string[] {": "},
StringSplitOptions.RemoveEmptyEntries)
我得到的结果是:
{"rajdra1 Subject", "Sticky Note Date", "09-08-2018 11:06:56"}
但我的预期产出是:
{"rajdra1", "Sticky Note", "09-08-2018 11:06:56"}
实际上,我从.txt文件中获取这个输入,并且总是以下面的格式获取输入
"Author: rajdra1 Subject: Sticky Note Date: 09-08-2018 11:06:56"
其中,我将“作者”、“主题”和“日期”作为列标题
我想在特定标题下添加预期结果。可以使用正则表达式从该字符串中提取自动、主题和日期:
var myRegex = new Regex(@"Author:\s+(?<author>.*)\sSubject:\s+(?<subject>.*)\s+Date:\s+(?<date>.*)", RegexOptions.None);
var strTargetString = @"Author: rajdra1 Subject: Sticky Note Date: 09-08-2018 11:06:56";
var str = new string[3];
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
str[0] = myMatch.Groups["author"].Value;
str[1] = myMatch.Groups["subject"].Value;
str[2] = myMatch.Groups["date"].Value;
}
var myRegex=new Regex(@“Author:\s+(?*)\s对象:\s+(?*)\s+日期:\s+(?*)”,RegexOptions.None);
var strTargetString=@“作者:rajdra1主题:便笺日期:09-08-2018 11:06:56”;
var str=新字符串[3];
foreach(在myRegex.Matches中匹配myMatch(strTargetString))
{
str[0]=myMatch.Groups[“author”].Value;
str[1]=myMatch.Groups[“subject”].Value;
str[2]=myMatch.Groups[“date”].Value;
}
一种有点长,但仍然相当简单和安全的方法是为要查找的每个部分显式搜索和拆分字符串:
var input = "Author: rajdra1 Subject: Sticky Note Date: 09-08-2018 11:06:56" ;
// For the sake of example; this will also work:
//var input = "Author: Someone Else Subject: Another note. Date: 09-08-2018 11:06:56" ;
var datePos = input.IndexOf("Date:");
// get: Date: 09-08-2018 11:06:56
var datePart = input.Substring(datePos);
var subjectPos = input.IndexOf("Subject:");
var subjectPartLength = datePos - subjectPos;
// get: Subject: Sticky Note
var subjectPart = input.Substring(subjectPos, subjectPartLength);
var authorPos = 0;
var authorLength = subjectPos;
// get: Author: rajdra1
var authorPart = input.Substring(authorPos, authorLength);
// Add each of the above, but skipping over the first part of each:
var result = new string[]{
authorPart.Substring(8),
subjectPart.Substring(9),
datePart.Substring(6)
};
这假设每个“列标题”后面都有一个空格。如果这是错误的,只需更改最后一行中传递到
Substring()
的数字。您能告诉我您迄今为止尝试了什么,以及为什么它没有达到您的预期吗?您已经编写了提取信息的方法,那么您遇到了什么问题?实际上,我正在尝试编写方法,但我感到困惑的是,应该如何分割这个字符串,以便获得预期的结果。您是如何获得输入的?这在您的控制范围内吗?您确定字符串中的空格都是普通空格吗?因为这意味着这是一种极其糟糕的格式,我建议不要再与该供应商合作。但是,如果字段名前面的空白实际上是一个[tab]字符,那么这将非常容易拆分和解析。谢谢你,但当我调试时,调试点永远不会进入foreach循环。
var input = "Author: rajdra1 Subject: Sticky Note Date: 09-08-2018 11:06:56" ;
// For the sake of example; this will also work:
//var input = "Author: Someone Else Subject: Another note. Date: 09-08-2018 11:06:56" ;
var datePos = input.IndexOf("Date:");
// get: Date: 09-08-2018 11:06:56
var datePart = input.Substring(datePos);
var subjectPos = input.IndexOf("Subject:");
var subjectPartLength = datePos - subjectPos;
// get: Subject: Sticky Note
var subjectPart = input.Substring(subjectPos, subjectPartLength);
var authorPos = 0;
var authorLength = subjectPos;
// get: Author: rajdra1
var authorPart = input.Substring(authorPos, authorLength);
// Add each of the above, but skipping over the first part of each:
var result = new string[]{
authorPart.Substring(8),
subjectPart.Substring(9),
datePart.Substring(6)
};