如何在两个已知字符串之间获取字符串?

时间:2017-01-06 13:57:53

标签: c# regex string

我有以下字符串(字符串的无用部分替换为[...]):

[...]
%S A000001 abcdefg
%T A000001 aabbccf
%U A000001 sdfqsfw
[...]

我需要准确获取abcdefg部分(以及其他部分,aabbccfsdfqsfw)。我已经得出结论使用正则表达式。

到目前为止我的想法:我搜索匹配%S A000001的位置,然后提取所有内容,直到出现换行符。虽然我知道正则表达式,但我几乎不知道怎么做到这一点。

我知道我可以用这种模式表达这句话:

%S A000001 .+\n

好吧,我仍然不知道如何提取.+部分。

有关如何在C#中实现此目的的任何想法?

为了澄清标题,我需要$S A000001\n之间的所有内容。

3 个答案:

答案 0 :(得分:4)

您不需要使用RegEx。你可以拆分字符串的已知部分。

var str = "%S A000001 abcdefg";
var abc = str.Split("A000001")[1].Trim();

当然,最好将“已知字符串”作为变量。这可用于确保该行包含该部分(如果您正在读取该字符串的“无用部分”)。

当然,这确实假设你正在读取一个文件,其中每一行都与你的例子中的一样。可以在每个.ReadLine()上使用此技术。

答案 1 :(得分:0)

如果您不想使用Split,可以执行类似

的操作
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);

这也必须应用于每一行

答案 2 :(得分:0)

我认为正则表达式是这种笨拙的字符串匹配的一个很好的选择。这是一个应该拿起你所追求的比赛的模式......

(?<=%[STU] A000001\s)\w+

假设您已将Regex配置为全局。

在这里测试:https://regex101.com/r/m2JswZ/1

如果要捕获的文本中有空格,则可以捕获到每行的末尾,如下所示:

(?<=%[STU] A000001 ).*(\n|\z)