2012-06-07 4 views
1

Я хотел бы лишить строки, но только оставить следующее:Регулярное выражение для разметки символов, кроме заданных?

[a-zA-Z]+[_a-zA-Z0-9-]* 

Я пытаюсь вывод строк, которые начинаются с символом, то может иметь буквенно-цифровые, подчеркивание и дефис. Как я могу это сделать с помощью RegEx или другой функции?

+0

У вас есть регулярное выражение - с чем вы столкнулись? –

+0

По строкам для вас означает 'string []'? Разве это не «получение всех совпадений» так же, как «не получить вещи, которые не совпадают»? – vcsjones

ответ

2

Потому что все во второй части регулярного выражения в первой части, вы могли бы сделать что-то вроде этого:

String foo = "[email protected]#$5o993idl;)"; // your string here. 
//First replace removes all the characters you don't want. 
foo = Regex.Replace(foo, "[^_a-zA-Z0-9-]", ""); 
//Second replace removes any characters from the start that aren't allowed there. 
foo = Regex.Replace(foo, "^[^a-zA-Z]+", ""); 

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

Конечно, если ваше регулярное выражение усложняется, это решение разваливается довольно быстро.

0

Edited

var s = Regex.Matches(input_string, "[a-z]+(_*-*[a-z0-9]*)*", RegexOptions.IgnoreCase); 
      string output_string=""; 
      foreach (Match m in s) 
      { 
       output_string = output_string + m; 

      } 
    MessageBox.Show(output_string); 
+0

Это странно .. ввод этого sdgfsd * ^% & $ AFSds возвращает sdgfsd. Это похоже на то, что он завершает работу после поиска специальной строки. – TruMan1

+0

@ TruMan1 Что вы подразумеваете под полосой? OP спрашивает об удалении строки из заданной строки. –

+0

Я бы ожидал, что sdgfsd * ^% & $ AFSds вернет sdgfsdAFSds, но возвращает sdgfsd. – TruMan1

0

Если предположить, что у вас есть строки в коллекции, я хотел бы сделать это следующим образом:

  1. Еогеаспа элемент в коллекции пытается соответствовать регулярному выражению
  2. если успех, удалить строку из! сбор

Или наоборот - если он соответствует, добавьте его в новую коллекцию.

Если строки отсутствуют в коллекции, вы можете добавить более подробную информацию о том, как выглядит ваш ввод?

0

Если вы хотите, чтобы вытащить все из идентификаторов, соответствующих регулярное выражение, вы можете сделать это следующим образом:

var input = " _wontmatch f_oobar0 another_valid "; 
var re = new Regex(@"\b[a-zA-Z][_a-zA-Z0-9-]*\b"); 
foreach(Match match in re.Matches(input)) 
    Console.WriteLine(match.Value); 
0

Использование MatchCollection matchColl = Regex.Matches("input string","your regex");

Затем используйте:

string [] outStrings = new string[matchColl.Count]; //A string array to contain all required strings 

for (int i=0; i < matchColl.Count; i++) 
    outStrings[i] = matchColl[i].ToString(); 

Вы будет иметь все необходимые строки в outStrings. Надеюсь это поможет.

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