2013-03-10 2 views
0

я получил следующее регулярное выражениеЗаменить строку в многострочного регулярное выражение с конца строки маркера

var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)$", "", 
                 RegexOptions.Multiline); 

, который не работает. Он работает, если я использую \r\n, но я хотел бы поддерживать все типы разрывов строк. Поскольку another answer утверждает, что я должен использовать RegexOptions.Multiline, чтобы использовать $ в качестве символа конца строки (вместо конца строки). Но, похоже, это не помогает.

Что я делаю неправильно?

ответ

2

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

Проблема $ является утверждением с нулевой шириной. Он не соответствует символу новой строки, он соответствует позиции до\n.

Вы можете делать разные другие вещи:

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

    var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)[\r\n]+", ""); 
    
  2. Если вы только хотите сопоставить новую строку после строки и сохранить следующие пустые строки, вам необходимо создать шаблон для всех возможных комбинаций, например:

    var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)\r?\n", ""); 
    

    Это будет соответствовать комбинации \n и \r\n

+0

ааа ок. Я просто подумал, что '' 'просто как использование любой новой комбинации строк. Но он соответствует концу строки, как и после любых символов NL, не так ли? – jgauffin

+0

Он соответствует концу строки перед символами новой строки, но он просто соответствует этой позиции, он не соответствует ни одному символу. – stema

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