如何从指定的子字符串读取到下一个子字符串

时间:2014-02-18 11:44:24

标签: c# regex string substring

我有一个字符串,其中包含许多文本,其中有子字符串,如..

1 . 1 To Airtel Mobile
1 03/MAR/2013 16:06:31 9845070641 05:44 1.80 **
2 04/MAR/2013 10:00:29 9845096416 00:14 0.30 **
3 04/MAR/2013 20:02:35 9845096416 08:12 2.70 **
4 06/MAR/2013 21:20:03 9632176702 00:37 0.30 **
5 09/MAR/2013 11:40:45 9845444042 01:29 0.60 **
6 11/MAR/2013 18:59:08 9900054971 01:14 0.60 **
7 12/MAR/2013 13:43:01 9686568009 03:57 1.20 **
8 13/MAR/2013 17:38:18 7760995045 00:48 0.30 **
9 21/MAR/2013 09:26:20 9845444043 02:47 0.90 **
10 21/MAR/2013 11:02:39 9845444043 00:15 0.30 **
11 22/MAR/2013 18:00:00 9845096416 00:11 0.30 **
Total 25:28 9.30

现在根据我的要求,我必须阅读这个子串“1.1 Airtel Mobile”之后的行到这个子串“Total 25:28 9.30”。这是我在c#中的代码,它将检查“1.1”对于Airtel Mobile“存在于字符串中。现在根据我的要求如何读取指定子字符串的行,即”Total 25:28 9.30“。 这是我在C#中的代码..

if(currentText.Contains("1 . 1 To Airtel Mobile"))
 {
         using (StringReader reader = new StringReader(currentText))
                    {
                        //
                    }

5 个答案:

答案 0 :(得分:3)

我已经创建了一个示例项目,并使用您给定的输入测试代码,并给出了您需要的结果。

string strStartString = "1 . 1 To Airtel Mobile";
        string strEndString = "Total 25:28 9.30";

        if (strRawData.StartsWith(strStartString) && strRawData.EndsWith(strEndString))
        {
            int startIndex = strRawData.IndexOf("1 . 1 To Airtel Mobile");
            int endIndex = strRawData.IndexOf("Total 25:28 9.30");

            int whereReadingStarts = strStartString.Length;
            int whereReadingStops = endIndex - whereReadingStarts;

            string strDesiredOutput = strRawData.Substring(whereReadingStarts, whereReadingStops);
            textBox1.Text = strDesiredOutput;
        }

string strStartString = "1 . 1 To Airtel Mobile"; string strEndString = "Total 25:28 9.30"; if (strRawData.StartsWith(strStartString) && strRawData.EndsWith(strEndString)) { int startIndex = strRawData.IndexOf("1 . 1 To Airtel Mobile"); int endIndex = strRawData.IndexOf("Total 25:28 9.30"); int whereReadingStarts = strStartString.Length; int whereReadingStops = endIndex - whereReadingStarts; string strDesiredOutput = strRawData.Substring(whereReadingStarts, whereReadingStops); textBox1.Text = strDesiredOutput; }

答案 1 :(得分:1)

我想这应该对你有用

if (currentText.Contains("1 . 1 To Airtel Mobile") && currentText.Contains("Total"))
{
    int startPosition = currentText.IndexOf("1 . 1 To Airtel Mobile");
    int endPosition = currentText.IndexOf("Total");

    string result = currentText.Substring(startPosition, endPosition-startPosition);
    // result will contain everything from and up to the Total line
    }

答案 2 :(得分:0)

您可以在此处使用字符串拆分功能来处理呼叫详细信息。

var txt ="1 03/MAR/2013 16:06:31 9845070641 05:44 1.80 **";
string [] split = txt.Split(new Char [] {' '});

//现在你有了

split[0] = 1;
split[1]="03/MAR/2013";
split[2]="16:06:31";
split[3]="9845070641";
split[4]="05:44";
split[5]="1.80";
split[6]="*";

根据您的数据做任何您想做的事情。你需要一些更多的逻辑来处理除了有电话细节之外的行

答案 3 :(得分:0)

假设您已经拥有所有需要的文本,您可以执行以下操作:

var lines = str.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

现在只需跳过lines中的第一项和最后一项。

答案 4 :(得分:0)

您可以使用SkipWhile跳过所有行,直到To Airtel Mobile标题。然后跳过此标题。然后用TakeWhile取下一行,直到总行:

var options = StringSplitOptions.RemoveEmptyEntries;
var lines = text.Split(new [] { Environment.NewLine }, options)
                .SkipWhile(s => !s.Contains("1 . 1 To Airtel Mobile"))
                .Skip(1)
                .TakeWhile(s => !s.Contains("Total"));