如何在给定的字符串中找到多次出现的特殊字符?

时间:2013-08-08 05:40:24

标签: c# wpf

string text = "{hello|{hi}} {world}";

实际上我希望来自给定字符串的每个出现位置的'{'和'}'

请帮帮我... 提前谢谢!

5 个答案:

答案 0 :(得分:3)

您可以使用Regex.Matches。它将搜索由“|”分割的所有字符串在句子里。 您可以将所有带有索引的字符串添加到Dictioanry。

  string pattern = "{|}";
  string text = "{hello|{hi}} {world}";
  Dictionary<int, string> indeces = new Dictionary<int, string>();
  foreach (Match match in Regex.Matches(text, pattern))
  {
       indeces.Add(match.Index, match.Value);
  }

结果是:

0-{
7-{
10-}
11-}
13-{
19-}

答案 1 :(得分:2)

var str = "{hello|{hi}} {world}";
var indexes = str.ToCharArray()
             .Select((x,index) => new {x, index})
             .Where(i => i.x=='{' ||i.x=='}')
             .Select(p=>p.index);

结果

0 
7 
10 
11 
13 
19 

答案 2 :(得分:2)

你可以使用一个函数的正则表达式来循环你的字符

示例1

string text = "{hello|{hi}} {world}";
var indexes = new List<int>();
var ItemRegex = new Regex("[{}]", RegexOptions.Compiled);
foreach (Match ItemMatch in ItemRegex.Matches(text))
{
    indexes.Add(ItemMatch.Index);
}

示例2(linq方式)

string text = "{hello|{hi}} {world}";

var itemRegex = new Regex("[{}]", RegexOptions.Compiled);
var matches = itemRegex.Matches(text).Cast<Match>();
var indexes = matches.Select(i => i.Index);

答案 3 :(得分:1)

创建两个列表 List<int> opening List<int> closing

然后扫描字符串in int i = 0;我&lt; string.length -1; i ++。 将每个字符与开括号或右括号进行比较。 比如如果chr =='{'然后将计数器i放入相应的列表中。

在整个字符串之后你应该在相应的列表中有位置开始和结束括号。

这有帮助吗?

答案 4 :(得分:0)

你可以枚举出现的事件:

public static IEnumerable<int> FindOccurences(String value, params Char[] toFind) {
  if ((!String.IsNullOrEmpty(value)) && (!Object.ReferenceEquals(null, toFind)))       
    for (int i = 0; i < value.Length; ++i) 
      if (toFind.Contains(value[i]))
        yield return i;
}

...

String text = "{hello|{hi}} {world}";

foreach(int index in FindOccurences(text, '{', '}')) {
  ...
}