Многострочный шаблон, соответствующий всей строке, работает в Python, но не в C # - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь найти совпадения слова TEST и заменить его на MTEXT, но по какой-то причине оно не работает. Однако это работает на Python.

Тестовый файл выглядит так

TEXT

TEXT


TEXT

Я использовал опцию MultiLine, но она все еще не работает.

RegexOptions options = RegexOptions.Multiline;
Console.WriteLine($"{fileContents}");
MatchCollection mc = Regex.Matches(fileContents, @"^(TEXT ?)$", options);
foreach (Match m in mc)
{
    Console.WriteLine("MATCH "+ m.Value);
}

Я ожидаю найти четыре совпадения, но не получу ни одного.

1 Ответ

0 голосов
/ 06 июля 2019

Полагаю, что ^ и $ не нужны.

sln предлагает это выражение:

(?<=^|\r?\n)\bTEXT\b

, который будет работать в c# или Python.

Я не совсем уверен, почему в Python все будет работать нормально, ^(TEXT ?)$ шаблон в принципе не должен работать в Python для этого случая, но, очевидно, я не прав.

DEMO

Тест

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?=^|\r?\n)\bTEXT\b";
        string substitution = @"MTEXT";
        string input = @"TEXT Some data before TEXT some data after

TEXTY Some data before  TEXT 

TEXT Some data before TEXT some data after

TEXT Some data before  TEXT NOTTEXT ";
        RegexOptions options = RegexOptions.Multiline;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...