c#如何获取具有多个相同字符的子字符串
我有以下字符串,变量为c#如何获取具有多个相同字符的子字符串,c#,char,substring,C#,Char,Substring,我有以下字符串,变量为s: 房间:501,用户:John,型号:XPR500序列号:JK0192,状况:良好 我想提取模型,XPR500和序列,JK0192 我能够通过以下代码获得模型: int pFrom = s.IndexOf("Model: ") + "Model: ".Length; int pTo = s.LastIndexOf(" Serial:"); String model = s.
s
:
房间:501,用户:John,型号:XPR500序列号:JK0192,状况:良好
我想提取模型,XPR500
和序列,JK0192
我能够通过以下代码获得模型:
int pFrom = s.IndexOf("Model: ") + "Model: ".Length;
int pTo = s.LastIndexOf(" Serial:");
String model = s.Substring(pFrom, pTo - pFrom);
但是,我很难获得序列值。我尝试了以下代码:
int pFromt = s.IndexOf("Serial: ") + "Serial: ".Length;
int pToT = s.LastIndexOf(", ");
string serial = s.Substring(pFromt, pToT - pFromt);
但它又回来了
JK0192,状况:良好
我很难从Serial:和下一个逗号中获取所有内容
有人知道我哪里出错了吗?您可以尝试使用一个简单的正则表达式:
@"Model\:\s([\w\d]*).*Serial\:\s([\w\d]*).*"
以下是一个完整的示例:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"Model\:\s([\w\d]*).*Serial\:\s([\w\d]*).*";
string input = @"Room: 501, User: John, Model: XPR500 Serial: JK0192, Condition: Good";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
希望这会有所帮助您可以使用字符串分隔符数组。我会使用标题作为分隔符。我不会使用逗号,因为:
static void Main(字符串[]args)
{
var s=“房间:501,用户:John,型号:XPR500序列号:JK0192,状况:良好”;
s=s.Replace(“,”,“”);//首先,删除所有逗号
var分隔符=新字符串[]{“房间:”,“用户:”,“模型:”,“序列:”,“条件:”};
//使用不假定所有分隔符的顺序或包含的函数
model=getValue(s,分隔符,“model:”);
serial=getValue(s,分隔符,“serial:”);
WriteLine($“Model='{Model}'”);
WriteLine($“Serial='{Serial}'”);
Console.ReadLine();
}
私有静态字符串getValue(字符串s、字符串[]分隔符、字符串分隔符)
{
//查找所查找标题后字符串其余部分开头的索引
var index=s.IndexOf(delimiter)+delimiter.Length;
//用所有分隔符拆分字符串的其余部分,取第一项
返回s.Substring(index).Split(分隔符,StringSplitOptions.RemoveEmptyEntries).First().Trim();
}
因此,,
有时是分隔符,但并不总是。为什么不在型号:XPR500系列:JK0192
之间?模型和序列之间是空格还是其他字符?另一个字符可以渲染为空格。也可能是一个标签在复制粘贴中丢失了?这正是从另一个源导出数据的方式。型号和序列号之间永远不会有逗号,但在两者之前/之后可能会有更多的逗号。这两者之间总是有多个空格?这些真的是空格吗?实际上是3个空格,不是tab,所以你能把字符串分成3个空格吗?