如何针对特定模式多次检查字符串?

时间:2015-09-03 05:26:22

标签: c# string

我有一个字符串(网站的源代码)。我想多次检查一个字符串。我目前使用此代码:

string verified = "starting";
if (s.Contains(verified))
{
    int startIndex = s.IndexOf(verified);
    int endIndex = s.IndexOf("ending", startIndex);
    string verifiedVal = s.Substring(startIndex + verified.Length, (endIndex - (startIndex + verified.Length)));
    imgCodes.Add(verifiedVal);
}

代码确实有效,但它只适用于找到的第一个字符串。字符串中有多个外观,所以如何找到它们并将它们添加到列表中?

感谢。

2 个答案:

答案 0 :(得分:3)

class Program
{
    static void Main(string[] args)
    {
        string s = "abc123djhfh123hfghh123jkj12";
        string v = "123";
        int index = 0;
        while (s.IndexOf(v, index) >= 0)
        {
            int startIndex = s.IndexOf(v, index);
            Console.WriteLine(startIndex);
            //do something with startIndex
            index = startIndex + v.Length ;
        }
        Console.ReadLine();
    }
}

答案 1 :(得分:2)

您可以使用Regex执行此操作:

var matches = Regex.Matches(s, @"starting(?<content>(?:(?!ending).)*)");
imgCodes.AddRange(matches.Cast<Match>().Select(x => x.Groups["content"].Value));

之后imgCodes将包含startingending之间的所有子字符串。

样品:

var s = "afjaöklfdata-entry-id=\"aaa\" data-page-numberuiwotdata-entry-id=\"bbb\" data-page-numberweriouw";
var matches = Regex.Matches(s, @"data-entry-id=""(?<content>(?:(?!"" data-page-number).)+)");
var imgCodes = matches.Cast<Match>().Select(x => x.Groups["content"].Value).ToList();
// imgCode = ["aaa", "bbb"] (as List<string> of course)

如果您不需要空字符串,可以将正则表达式中的.)*更改为.)+