我无法让它工作, 我需要得到一个角色:我[L] ove [B] asketball和[H]曲棍球
我想从这个字符串中取出L,B和H并在控制台中显示它们 不使用正则表达式 我虽然找到了[带索引并添加+ 1来获取该字母的位置然后替换[与其他东西ex:[into& 所以我可以在那个字符串中做一个foreach括号...但我不认为它会起作用o.O
Console.WriteLine("Characters are : ");
foreach(Brackets in sentence)..
答案 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);
}