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()读取的文件