我正在寻找在某些SWIFT标签之间提升文本的最有效方法。
我的字符串包含以下内容
:59:/SOMETEXT
MORETEXT
EVEN MORE TET
:71A:/some other text
所以在上面的例子中,我需要存储所有文本行:59:和:70:但是,tag:59:也可以表示如下:
:59a:/SOMETEXT
MORETEXT
EVEN MORE TET
:71A:/some other text
我正在考虑循环每个并保存当前标记和之前的标记,然后检查以前的标记是否为71A,但标记59a和标记71a之间可能还有“可选”标记
有关如何处理此事的任何建议吗?
答案 0 :(得分:1)
我会使用正则表达式,因为它们比循环更容易维护:
public string GetText(string text, string tag1, string tag2)
{
return Regex.Match(text, String.Format(":{0}[^:]?:(?<text>(\n|.)*):{1}[^:]?:", tag1, tag2)).Groups["text"].Value;
}
答案 1 :(得分:1)
var str = ":59:/SOME TEXT\n" +
"MORE TEXT\n" +
"EVEN MORE TEXT\n" +
":71A:/some other text\n";
var text = str.Split("\n\r".ToCharArray()).SkipWhile(l => !l.StartsWith(":59")).TakeWhile(l => !l.StartsWith(":71"));
var result = text.Select(l => new string(l.SkipWhile(c => Char.IsPunctuation(c) || Char.IsDigit(c)).ToArray()));
foreach (var l in result)
Console.WriteLine(l);
// output: SOME TEXT
// MORE TEXT
// EVEN MORE TEXT