2016-02-15 3 views
0

Я создал регулярное выражение, которое удаляет специальные символы (<> '&) и делает первую букву каждого слова столицы и прочее подчеркивание (_) между двумя словами. Например,
Вход: "V_DV3501_Value can't be empty"
Выход: "V_DV3501_Value_Cant_Be_Empty"Regex, чтобы удалить специальный символ

Регулярное выражение, что я создал производит вывод, как,

Выход: "V_DV3501_Value_Can't_Be_Empty"

Речь идет о том, апостроф (') символ не заменяется из строки. Я в порядке, если вы cansuggest любой другой шаблон, чем я ниже в коде для решения этой проблемы.

class Program 
{ 
    static void Main(string[] args) 
    { 
     string createString = ""; 
     string input = ""; 

     var pattern = @"(?:[^a-zA-Z_]*)((?<output>[a-zA-Z0-9_]*)[\s+&<>\',\/=-]*|$)*"; 

     var subject = "V_DV3501_Value can't be empty"; 

     subject = subject.ToString().Replace("&", "and"); 

     var regex = new Regex(pattern); 

     var match = regex.Match(subject); 
     Console.WriteLine("pattern: {0} {1} Length: {2}", pattern, match.Success, match.Length); 

     foreach (Capture capture in match.Groups["output"].Captures) 
     { 
      Console.WriteLine(" {0} @ {1} length {2}", capture.Value, capture.Index, capture.Length); 

      input = capture.Value + "_"; 

      if (!String.IsNullOrEmpty(input)) 
      { 
       input = input.First().ToString().ToUpper() + input.Substring(1); 
      } 

      createString = createString + input; 

     } 

     createString = createString.Remove(createString.Length - 2); 
     Console.WriteLine("Final: " + createString); 
    } 
} 

Благодаря

+4

Возможный дубликат [Regex для удаления апострофа] (http://stackoverflow.com/questions/1219915/regex-to-remove-apostrophe) – MethodMan

+0

Проверьте, работает ли [это работает как ожидается] (http: // ideone .com/AFaeEy). –

+0

@ WiktorStribiżew Большое спасибо за ваш быстрый ответ. – VSharma

ответ

0

Вы можете использовать следующее решение:

var str = "V_DV3501_Value can't be empty"; 
var res = Regex.Replace(str, @"[\W-[']](\p{L})|'", m => 
     m.Groups[1].Success ? string.Format("_{0}", m.Groups[1].Value.ToUpper()) : ""); 
Console.WriteLine(res); 
// => V_DV3501_Value_Cant_Be_Empty 

См IDEONE demo

Идея заключается в том, чтобы использовать [\W-[']](\p{L})|' регулярное выражение, которое соответствует либо любой не-слово символ, кроме '[\W-[']], заменить на _ позже), а затем с буквой (с (\p{L})) и запишите письмо, чтобы позже мы могли проверить, участвовала ли группа в матче (и если да, переверните ее в верхнем регистре) или просто сопоставьте ', чтобы заменить ее ничем.

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