Skip to main content
 首页 » 编程设计

c#之带有单词边界的正则表达式在 .NET Regex 中失败

2024年02月06日31jillzhang

我对 C# 中的 .NET 正则表达式有疑问。我们正在尝试匹配段落符号 § 包围的文本中的特殊标记。为了完整起见,那些相应的正则表达式被单词边界 \b 包围。问题是 \b 包围的正则表达式不匹配单词:

    static void Main(string[] args) 
    { 
        string data = "I would like to replace this §pattern§ with something interesting"; 
        string requiredResult = "I would like to replace this serious text with something interesting"; 
 
        Regex regSuccess = new Regex("§pattern§"); 
        Regex regFail = new Regex(@"\b§pattern§\b"); 
 
        var dataSuccess = regSuccess.Replace(data, "serious text"); 
        var dataFail = regFail.Replace(data, "serious text"); 
 
        Console.WriteLine("regSuccess match: {0}", dataSuccess == requiredResult); 
        Console.WriteLine("regFail match: {0}", dataFail == requiredResult); 
        Console.WriteLine("Press enter to continue"); 
        var line = Console.ReadLine(); 
    } 

如您所见,dataFail == requiredResult 返回 false。

请您参考如下方法:

替换

Regex regFail = new Regex(@"\b§pattern§\b"); 

与

Regex regFail = new Regex(@"§\bpattern\b§"); 

§ 是一个非单词字符,因此,\b 会阻止 pattern 被匹配。也许,你甚至不需要这里的 \b 因为 pattern 已经在非单词字符中了?

Regex regFail = new Regex(@"§pattern§");