假设有如下文本:
string str = @"stackoverflow(
堆叠:stackoverflow)overstackflow(
_:stackoverflow)";
我想获得大胆的领域。我想我必须在文本中找到“(”和“:”并获取它们之间的文本。不是吗?
有什么建议吗?
也许用简单的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);
}
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
}
}
我会选择类似的东西:
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);
}
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
循环中使用它来迭代您的字符串。