多行模式匹配整个行在python中有效,但在C#中不起作用

时间:2019-07-05 21:39:23

标签: c# regex

我正在尝试找到单词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 :(得分:0)

我的猜测是,也许^$并不是必需的。

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);
    }
}