Подтвердить что ты не робот

Regex, который соответствует новой строке (\n) в С#

Хорошо, этот меня заводит... У меня есть строка, которая формируется таким образом:

var newContent = string.Format("({0})\n{1}", stripped_content, reply)

newContent будет отображаться как:
  (старый текст)
  новый текст

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

Лучшее, что я могу придумать, это:

const string  regex = @"^(\(.*\)\s)?(?<capture>.*)";
var match= Regex.Match(original_content, regex);
var stripped_content = match.Groups["capture"].Value;

Это работает, но я хочу, чтобы специально соответствовать новой строке (\n), а не пробелам (\s) Замена \s на \n \\n или \\\n НЕ работает.

Пожалуйста, помогите мне держаться за мое здравомыслие!

EDIT: пример:

public string Reply(string old,string neww)
        {
            const string  regex = @"^(\(.*\)\s)?(?<capture>.*)";
            var match= Regex.Match(old, regex);
            var stripped_content = match.Groups["capture"].Value;
            var result= string.Format("({0})\n{1}", stripped_content, neww);
            return result;
        }

Reply("(messageOne)\nmessageTwo","messageThree") returns :
(messageTwo)
messageThree
4b9b3361

Ответ 1

Если вы укажете RegexOptions.Multiline, вы можете использовать ^ и $ для соответствия началу и концу строки соответственно.

Если вы не хотите использовать эту опцию, помните, что новая строка может быть любой из следующих: \n, \r, \r\n, поэтому вместо того, чтобы искать только \n, вы возможно, используйте что-то вроде: [\n\r]+, а точнее: (\n|\r|\r\n).

Ответ 2

На самом деле это работает, но с противоположным вариантом, т.е.

 RegexOptions.Singleline

Ответ 3

Вероятно, у вас будет \r перед вашим \n. Попробуйте заменить \s на (\ r\n).

Ответ 4

Если вы пытаетесь совместить окончания строк, вы можете найти

Regex.Match("string", "regex", RegexOptions.Multiline)

помогает

Ответ 5

Думаю, что я немного опоздаю на вечеринку, но надеюсь, что это поможет.

Мне нужно было получить несколько токенов между двумя символами хеширования.

Пример i/p:

## token1 ##
## token2 ##
## token3_a
token3_b
token3_С##

В моем случае это работало:

var matches = Regex.Matches (mytext, "##(.*?)##", RegexOptions.Singleline);

Конечно, вы можете заменить двойные символы хэша на обоих концах своими собственными символами.

НТН.

Ответ 6

Как ни странно, вы можете использовать опции Multiline и Singleline.

Regex.Match(input, @"(.+)^(.*)", RegexOptions.Multiline | RegexOptions.Singleline)

Первая группа захвата будет содержать первую строку (включая \r и \n), а вторая группа будет иметь вторую строку.

Почему:

  • Multiline:

    ^ и $ соответствуют началу и концу каждой строки (вместо начала и конца входной строки).

  • Singleline:

    Точка (.) соответствует каждому символу (вместо каждого символа, кроме \n)

    см документы