我有以下字符串(字符串的无用部分替换为[...]
):
[...]
%S A000001 abcdefg
%T A000001 aabbccf
%U A000001 sdfqsfw
[...]
我需要准确获取abcdefg
部分(以及其他部分,aabbccf
和sdfqsfw
)。我已经得出结论使用正则表达式。
到目前为止我的想法:我搜索匹配%S A000001
的位置,然后提取所有内容,直到出现换行符。虽然我知道正则表达式,但我几乎不知道怎么做到这一点。
我知道我可以用这种模式表达这句话:
%S A000001 .+\n
好吧,我仍然不知道如何提取.+
部分。
有关如何在C#中实现此目的的任何想法?
为了澄清标题,我需要$S A000001
和\n
之间的所有内容。
答案 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)