c#在括号内查找字符

时间:2014-02-25 17:17:02

标签: c# string character brackets

我无法让它工作, 我需要得到一个角色:我[L] ove [B] asketball和[H]曲棍球

我想从这个字符串中取出L,B和H并在控制台中显示它们 不使用正则表达式 我虽然找到了[带索引并添加+ 1来获取该字母的位置然后替换[与其他东西ex:[into& 所以我可以在那个字符串中做一个foreach括号...但我不认为它会起作用o.O

Console.WriteLine("Characters are : ");
foreach(Brackets in sentence)..

6 个答案:

答案 0 :(得分:6)

string str = " i [L]ove [B]asketball and [H]ockey";
string[] array = str.Split('[');
foreach (var item in array)
{
    if(item.Contains(']'))
        Console.WriteLine(item[0]);
}

你会得到:

L
B
H

只要你没有不成对的方括号并且这些方括号之间有一个字符,这就可以工作。

答案 1 :(得分:2)

您可以在不拆分的情况下执行此操作:

string str = " i [L]ove [B]asketball and [H]ockey";

for (int i = 0; i < str.Length; i++)
{
    if(str[i] == '[')
        Console.WriteLine(str[1 + i++]);
}

答案 2 :(得分:0)

您可以使用此正则表达式获取括号之间的值:

string input = "I [L]ove [B]asketball and [H]ockey";
var regex = new Regex(@"\[.*?\]");
var matches = regex.Matches(input);
foreach (var match in matches)
{
    var letter = Regex.Replace(match.ToString(), @"\[|\]", string.Empty);
    Console.WriteLine(letter);
}

答案 3 :(得分:0)

使用LINQ:

string s = "i [L]ove [B]asketball and [H]ockey";
var chars = s.Where((c, i) => i > 0            && s[i - 1] == '[' && 
                              i < s.Length - 1 && s[i + 1] == ']');

等效地:

var chars = Enumerable.Range(1, s.Length - 2)
                      .Where(i => s[i - 1] == '[' && s[i + 1] == ']')
                      .Select(i => s[i]);

答案 4 :(得分:0)

使用正则表达式:

string str = " i [L]ove [B]asketball and [H]ockey";
Match match = Regex.Match(str, @"\[(.*?)\]");
StringBuilder sb = new StringBuilder();
//iterate over all matches
do
{
 sb.Append(match);
 match = match.NextMatch();
}while(match.Success); //condition
//note: Dump() only works in linqpad. Use Console.WriteLine() instead
sb.Dump();
//without brackets:
sb.ToString().Split(new []{'[',']'}, StringSplitOptions.RemoveEmptyEntries).Dump();

答案 5 :(得分:0)

我提出了冗长的代码,但它适用于所有情况

试试这个:

   static  void Main()
    {
        string line =  "i [L]ove [B]asketball and [H]ockey";
        int count = 0;
        char temp=' ';
        string str="";
        foreach (char ch in line)
        {
            if (ch == '[')
            {
                count++;
            }
            else if (count ==1)
            {
                count++;
                temp=ch;
            }
            else if(count==2 && ch==']')
            {
                str+=temp;
                count=0;
            }              
            else
            {
                count = 0;
            }
        }
        Console.WriteLine(str);
    }