C# 如何在两个已知字符串之间获取字符串?
我有以下字符串(字符串的无用部分替换为C# 如何在两个已知字符串之间获取字符串?,c#,regex,string,C#,Regex,String,我有以下字符串(字符串的无用部分替换为[…]): 我需要准确地获取abcdefg部分(以及其他部分,aabbccf和sdfqsfw)。我得出了使用正则表达式的结论 到目前为止,我的想法是:我搜索它与%S A000001匹配的位置,然后提取所有内容,直到出现换行符。虽然我知道正则表达式的模式,但我真的不知道如何做到这一点 我知道我可以用这个模式来表达这条线: %S A000001 .+\n 嗯,我仍然不知道如何提取+部分 关于如何在C#中实现这一点,有什么想法吗 为了澄清标题,我需要介于$S A
[…]
):
我需要准确地获取abcdefg
部分(以及其他部分,aabbccf
和sdfqsfw
)。我得出了使用正则表达式的结论
到目前为止,我的想法是:我搜索它与%S A000001
匹配的位置,然后提取所有内容,直到出现换行符。虽然我知道正则表达式的模式,但我真的不知道如何做到这一点
我知道我可以用这个模式来表达这条线:
%S A000001 .+\n
嗯,我仍然不知道如何提取+
部分
关于如何在C#中实现这一点,有什么想法吗
为了澄清标题,我需要介于
$S A000001
和\n
之间的所有内容,您不需要使用正则表达式。您可以只拆分字符串的已知部分
var str = "%S A000001 abcdefg";
var abc = str.Split("A000001")[1].Trim();
当然,最好将“已知字符串”作为变量。这可用于确保行包含该部分(如果您正在读取字符串的“无用部分”)
当然,这确实假设您正在读取一个文件,其中每一行都与示例中的一样。此技术可用于每个
.ReadLine()
您不需要使用正则表达式。您可以只拆分字符串的已知部分
var str = "%S A000001 abcdefg";
var abc = str.Split("A000001")[1].Trim();
当然,最好将“已知字符串”作为变量。这可用于确保行包含该部分(如果您正在读取字符串的“无用部分”)
当然,这确实假设您正在读取一个文件,其中每一行都与示例中的一样。此技术可用于每个
.ReadLine()
如果不想使用拆分,可以执行以下操作
int slenght = "%S A000001 ".Length;
string str = "%S A000001 abcdefg"; //your line
str = str.Substring(slenght);
如果你有一个可变长度
string str = "%S A000001 abcdefg"; //your line
int iOfFirst = str.IndexOf(' ');
int iOfSecond = str.IndexOf(' ', iOfFirst + 1);
str = str.Substring(iOfSecond + 1);
这也必须应用于每一行如果您不想使用拆分,您可以执行以下操作
int slenght = "%S A000001 ".Length;
string str = "%S A000001 abcdefg"; //your line
str = str.Substring(slenght);
如果你有一个可变长度
string str = "%S A000001 abcdefg"; //your line
int iOfFirst = str.IndexOf(' ');
int iOfSecond = str.IndexOf(' ', iOfFirst + 1);
str = str.Substring(iOfSecond + 1);
这也必须应用于每一行我认为正则表达式对于这种笨拙的字符串匹配是一个不错的选择。这里有一个模式,你应该选择你所追求的比赛
(?<=%[STU] A000001\s)\w+
(?我认为正则表达式对于这种笨拙的字符串匹配是一个很好的选择。这里有一个模式,它应该能够找到您想要的匹配项
(?<=%[STU] A000001\s)\w+
(a00001
是静态的吗?%
之后会有更多的字母吗?S
、T
和U
,所以只有一个字母。a00001
是一个变量,实际上,我计划使用字符串连接(%S”+aNumber
)。您可以使用Regex.Matches(s,@“(?m)^%[STU]\w++”).Cast().Select(m=>m.Groups[1].Value.ToList();
。或者,要使用您的变量:string.Format(@“(?m)^%[STU]{0}.+”,aNumber)
incomingStringLines.Split('\n')[0].Split('[2]
首先在返回字符上分开,然后在空格上分开。这将为您提供第一行和第三个值。如果您遍历一段长度的行并选中.Split(“”)[2]
为了匹配预期的变量,此时,您可以验证它不是字符串中无用的部分。A000001
是静态的吗?在%
之后是否还会有更多的字母?我只需要指定的三种情况,S
、t
和U
,因此只有一个字母。A000001
是一个变量,一个实际上,我计划使用字符串连接(“%S”+aNumber
)。您可以使用Regex.Matches(S,@“(?m)^%[STU]\w++”).Cast()。选择(m=>m.Groups[1].Value)。ToList();
。或者,要使用变量:string.Format(@“(?m)^%[STU]{0}.+”,aNumber)
incomingStringLines.Split
首先在返回字符上分开,然后在空格上分开。这将为您提供第一行和第三个值。如果您遍历一段长度的行并选中.Split(“”)[2]
为了匹配预期的变量,此时,您可以验证它不是字符串中无用的部分。abcdefg
未知。abcdefg
未知是可以的。此过程取初始行,并在“已知字符串”处将其拆分。[1]
获取字符串的最后一部分,并将其放入新变量中。示例的第一行,变量abc
将等于abcdefg
。在第二行,abc
将等于aabbccf
。在最后一行,它将是sdfqsfw
。问题是,在%S
之前,有相同的数字,%U
之后的数字也是一样。如果我将其更改为.Split(“%S A…”
)会起作用吗?它都是一个字符串,还是一个有几行的文件?我看不出区别吗?一个文件是一个字符串,由'\n'
字符分割。但是是的,这是一个我正在使用StreamReadReader.ReadToEnd()读取的文件
,abcdefg
未知。abcdefg
未知是可以的。此过程取初始行,并在“已知字符串”处将其拆分。[1]
获取字符串的最后一部分,并将其放入新变量中。示例的第一行,变量abc
将等于abcdefg
。在第二行,abc
将等于aabbccf
。在最后一行,它将是sdfqsfw
。问题是,在%S
之前,有相同的数字,%U
之后的数字也是一样。如果我将其更改为.Split(“%S A…”
)会起作用吗?它都是一个字符串,还是一个有几行的文件?我看不出区别吗?一个文件是一个字符串,由'\n'
字符分割。但是是的,这是一个我正在使用StreamReadReader.ReadToEnd()读取的文件
,