fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.RegularExpressions;
  4. using System.Linq;
  5. public class Test
  6. {
  7. public static void Main()
  8. {
  9. var tests = new List<string> {"<backspace>это буу<backspace>дка<backspace><backspace>ет тек<backspace>стовыыф<backspace><backspace>й ткаукц<backspace><backspace><backspace><backspace><backspace>екст",
  10. "Это<backspace><backspace><backspace><backspace><backspace><backspace>",
  11. "a<backspace><backspace><backspace>b",
  12. "<backspace><backspace><backspace><backspace>",
  13. "ab<backspace>c<backspace><backspace>d" };
  14. foreach(var test in tests)
  15. Console.WriteLine("'{0}'", Rx.backspaceRx.Replace(test, string.Empty));
  16.  
  17. }
  18.  
  19. public static class Rx
  20. {
  21. public static readonly Regex backspaceRx = new Regex(
  22. @"^(?:<backspace>)+ # 1+ <backspace> в начале
  23. | # или
  24. (?:
  25. (?<t>(?<!<backspace).) # Любой символ, перед которым нет <backspace
  26. | # или
  27. (?<-t><backspace>) # <backspace>
  28. )+ # 1 или более раз
  29. (?(t)(?!)) # проверка стека группы t
  30. (?:<backspace>)* # 0+ <backspace>",
  31. RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
  32. }
  33. }
  34.  
Success #stdin #stdout 0.04s 134720KB
stdin
Standard input is empty
stdout
'это будет тестовый текст'
''
'b'
''
'd'