假设有如下文字:
string str = @"stackoverflow(
的堆 :stackoverflow)overstackflow(
的在 :stackoverflow)";
我想获得大胆的领域。 我想我必须在文本中找到“(”和“:”并在它们之间得到文本。不是吗?
有什么建议吗?
答案 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);
}
答案 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
循环中使用它来迭代你的字符串。