在文本块中查找文本

时间:2014-02-16 11:53:30

标签: c# swift-mt

我正在寻找在某些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之间可能还有“可选”标记

有关如何处理此事的任何建议吗?

2 个答案:

答案 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