2017-02-09 8 views
1

Мой кодC# регулярное выражение раскола игнорируя символы, такие как «=» «-»

string sentence = ".a -w =e ?a"; 
string[] words = Regex.Split(sentence, @"(?![-\/.:~+=!>?])\W+"); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 

выходы .a w e a, но я хочу, чтобы выход .a -w =e ?a

я немного невежественный по кодированию, так что любая помощь будет будем очень благодарны.

+1

Если вы новичок в кодировании, это намного проще в использовании 'String.Split' разделить на пустые пространства между тем, что вы пытаетесь захватить. 'sentence.Split ('');'. – Tim

+1

Строка, которую вы хотите вывести, соответствует введенной вами строке; пожалуйста, вы можете уточнить, что вы надеетесь сделать? то есть в настоящее время 'string sentence =" .a -w = e? a "; Console.WriteLine (предложение); 'выполнит ваше заявленное требование ... – JohnLBevan

+0

Что вы пытаетесь сделать точно? Основываясь на ожидаемом выходе, похоже, вы хотите разделить только пробелы. Я не уверен, почему у вас есть все это в регулярном выражении. Что именно вы ожидаете увидеть словами 'words [0]', 'words [1]' и т. Д.? – smead

ответ

0

Изменение вашего кода, как показано ниже, вернет желаемый результат. Метод Split() будет разделять строку на основе ввода и возвращать массив. Разделение регулярных выражений было бы лучше для более сложных требований разделения.

string sentence = ".a -w =e ?a"; 
string[] words = sentence.Split(' '); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 
0

Предполагая, что вы хотите вывод: а, б, е, а:

string sentence = ".a -w =e ?a"; 
string[] words = Regex.Split(sentence, @"[\W_]+"); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 

Это расщепляется на что-нибудь, что это не буква или цифра.

Объяснение

  • \W = не буква, цифра или знак подчеркивания (см http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1)
  • _ =, так как мы только хотим, буквы или цифры в наших словах, также включают подчеркивание как символ для разделения на
  • [ ... ] - это говорит о разделении на \W или _; а не \W, за которым следует _.
  • + - это говорит о том, что несколько кратных символов последовательно обрабатываются как 1; то есть a - b приводит к a, b, а не a ,,, b.
+0

'[...]' установлена ​​нотация, которая не говорит о расколе. Это набор, который будет разделен на ... – OmegaMan

0

Вам не нужно использовать Split, но может просто соответствовать любому, что не является пространством.

Regex.Matches(".a -w =e ?a", @"[^\s]+") 
    .OfType<Match>() 
    .Select(mt => mt.Value) 

будет возвращать массив слов

enter image description here


[^\s]+ говорит матч ничего из этого множества [...] которое не^ пространство \s. + один или несколько из этих символов (символы, которые не являются пробелом).


Обратите внимание, что я написал статью в блоге, почти десять лет тому назад, о западню использования регулярных выражений разделить на несколько строк и работает с проблемами.

Regex Split Pitfalls Over Multiple Lines

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

  • Нет связанных вопросов^_^