5

假设有如下文本:

string str = @"stackoverflow(堆叠:stackoverflow)overstackflow(_:stackoverflow)";

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

有什么建议吗?

4

5 回答 5

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);
}

演示

于 2012-12-20T09:23:15.763 回答
1

看看这个帖子,你就能找到答案。

如何提取括号(圆括号)之间的文本?

您只需要对该正则表达式进行小的更改。

于 2012-12-20T09:19:47.937 回答
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
  }
}
于 2012-12-20T09:20:05.763 回答
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);
}

因此,如果您只想要 the(和 the之间的位,则:可以使用

foreach(Match m in matches)
{
    Console.WriteLine(m.Groups[2].Value);
}
于 2012-12-20T09:21:25.413 回答
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循环中使用它来迭代您的字符串。

演示

于 2012-12-20T09:25:03.060 回答