以严格的文本获取文本的特定部分

时间:2012-12-20 09:14:47

标签: c# .net string c#-4.0

假设有如下文字:

string str = @"stackoverflow( :stackoverflow)overstackflow( :stackoverflow)";

我想获得大胆的领域。 我想我必须在文本中找到“(”和“:”并在它们之间得到文本。不是吗?

有什么建议吗?

5 个答案:

答案 0 :(得分:6)

也许使用简单的string方法:

IList<String> foundStrings = new List<String>();
int currentIndex = 0;
int index = str.IndexOf("(", currentIndex);
while(index != -1)
{
    int start = index + "(".Length;
    int colonIndex = str.IndexOf(":", start);
    if (colonIndex != -1)
    {
        string nextFound = str.Substring(start, colonIndex - start);
        foundStrings.Add(nextFound);
    }
    currentIndex = start;
    index = str.IndexOf("(", currentIndex);
}

Demo

答案 1 :(得分:1)

看看这篇文章,你就可以找到答案了。

  

How do I extract text that lies between parentheses (round brackets)?

您只需对该正则表达式进行少量更改。

答案 2 :(得分:1)

string strRegex = @"\((.+?)\:";
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"stackoverflow(stack:stackoverflow)overstackflow(over:stackoverflow)";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}

答案 3 :(得分:1)

我会选择类似的东西:

Regex matcher = new Regex(@"([^():}]+)\(([^():}]*):([^():}]*)\)");
MatchCollection matches = matcher.Matches(str);

这将查看您输入的所有内容group1(group2:group3)。 (如果任何群组包含():,整个内容都会被忽略,因为它无法弄清楚到底是什么意思。)

然后您可以获得匹配的值,例如

foreach(Match m in matches)
{
    Console.WriteLine("First: {0}, Second: {1}, Third{2}",
        m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value);
}

所以,如果你只想要(:之间的位,你可以使用

foreach(Match m in matches)
{
    Console.WriteLine(m.Groups[2].Value);
}

答案 4 :(得分:1)

public static void Main(string[] args)
        {
            string str = @"stackoverflow(stack:stackoverflow)overstackflow(over:stackoverflow)";
            Console.WriteLine(ExtractString(str));
        }

        static string ExtractString(string s)
        {
            var start = "(";
            int startIndex = s.IndexOf(start) + start.Length;
            int endIndex = s.IndexOf(":", startIndex);
            return s.Substring(startIndex, endIndex - startIndex);
        }

结果是stack但你可以在foreach循环中使用它来迭代你的字符串。

Demo