2015-07-29 2 views
0

Я пытаюсь извлечь из текста один из таких символов: «<», «=», «< =", ">", "> =", "<>", ¬ =».Поиск символа в тексте C#

Пример текста может выглядеть как "> 10 dalk tasd ... " или " >= 10 asdasdasd ..". Могло быть много символов пробелов.

Я пытаюсь сделать что-то вроде ниже, но это не работает:

string sign = new string(textCh.SkipWhile(c => !Char.IsSymbol('>') || !Char.IsSymbol('=') || !Char.IsSymbol('<') || !Char.IsSymbol('¬')) 
           .TakeWhile(c => Char.IsSymbol('=') || Char.IsSymbol('>')).ToArray()); 

Как я могу получить его?

+3

Я думаю, что эта задача будет намного проще, если вы используйте Regex –

+0

, выход является символом одного из символов «<», «=», «<=", ">», «> =», «<>», «¬ =» –

+0

. Вы хотите, чтобы индекс всех символов, соответствующих критерии поиска или просто первый экземпляр? – user1666620

ответ

0

Вы не хотите SkipWhile (критерий или критерий или критерий), так как символ, который вы хотите взять может быть только один из <, = или>, а также критерии, соответствующие символы она является не будет true, и символ будет пропущен.

Вы можете изменить критерии SkipWhile как & &, или вы можете использовать регулярное выражение.

var sign = System.Text.RegularExpressions.Regex.Match("<[>=]?|=|>=?|¬=").Value; 
+0

Добавлено определенное регулярное выражение. –

+0

Он не принимает < –

+0

Вы правы - конечный [> =] должен быть необязательным. Ред. –

0

Чтобы извлечь первый такой символ, я хотел бы использовать

Regex.Match(myString, "<[>=]?|=|>=?|!=").Value 
+0

Вам не хватает нескольких комбинаций, например, вы не обрабатываете '>' самостоятельно. Если вы исправили его, чтобы обрабатывать все элементы, перечисленные в списке OP, у вас будет мой верхний номер –

+1

Я исправил ваше регулярное выражение, чтобы принять < and > –

+0

Не знаю, почему это происходит с понижением - это действительно близко. ¬ вместо! и это работает. –

-1
string example = "avasvasv>asfascvd<hrthtjh"; 
      int firstIndex = example.IndexOfAny(new char[] { '>', '<', '-', '=' }); 
      int lastIndex = example.Substring(firstIndex + 1).IndexOfAny(new char[] { '=', '>'}); 
      string outPutExample = example.Substring(firstIndex + 1).Substring(0, lastIndex); // OutPut -> asfascvd 
-1

Просто поместите все эти символы в строке [] и с помощью LINQ:

string[] specialSymbols = { "<", "=", "<=", ">", ">=", "<>", "¬=" }; 
string text = "asdijax ~ aszxc <=  --- >="; 

string sign = specialSymbols.Where(s => text.Contains(s)) 
       .First(f => f.Length == specialSymbols.Max(f2 => f2.Length)); 

Выход: <=

+1

из этого текста он должен вернуться <= –

+0

@ Paweld_00 вам нужны все символы или только первое совпадение? – Fabjan

+0

только первый соответствует –

Смежные вопросы