2016-05-27 4 views
0

У меня есть строка и вы хотите проверить, есть ли буква (только одна), которая окружена пробелами. Я пытался использовать Regex, но что-то не так.Как проверить, существует ли символ между двумя пробелами C#

Console.Write("Write a string: "); 
string s = Console.ReadLine(); 
string[] results = Regex.Matches(s, @" (a-zA-Z) ") 
.Cast<Match>() 
.Select(m => m.Groups[1].Value) 
.ToArray(); 

Я не уверен, если я делаю это право Я новичок в C#

+0

Может быть тяжелее, чем '\ s \ ш \ s'? – Will

+4

Вы хотели использовать '@" [a-zA-Z] ". То, что у вас есть, буквально ищет «a-zA-Z». – juharr

+0

Кроме того, по словам «персонажа», вы имеете в виду любого персонажа? Или просто 'a-z' и' A-Z'? – Icemanind

ответ

3

полномасштабная RegEx, кажется, тяжелый материал для такой простой операции.

Это пример того, как это сделать. Он включает в себя множество предположений, которые могут быть неверными для вас (тот факт, что я не считаю начало или конец строки допустимым пробелом, факт, что я проверяю WhiteSpace вместо пустого, вам придется проверить эти предположения I сделал).

namespace ConsoleApplication4 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 

    public static class StringExtensions 
    { 
    public static IEnumerable<int> IndexOfSingleLetterBetweenWhiteSpace(this string text) 
    { 
     return Enumerable.Range(1, text.Length-2) 
         .Where(index => char.IsLetter(text[index]) 
            && char.IsWhiteSpace(text[index + 1]) 
            && char.IsWhiteSpace(text[index - 1])); 
    } 
    } 

    class Program 
    { 
    static void Main() 
    { 
     var text = "This is a test"; 

     var index = text.IndexOfSingleLetterBetweenWhiteSpace().Single(); 

     Console.WriteLine("There is a single letter '{0}' at index {1}", text[index], index); 
     Console.ReadLine(); 
    } 
    } 
} 

Это должно напечатать

Существует одна буква 'а' с индексом 8

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