【问题标题】:Regex not matching ACUTE ACCENT正则表达式与 ACUTE ACCENT 不匹配
【发布时间】:2021-11-09 06:28:53
【问题描述】:

我正在尝试删除放置在诸如空格等非法字符上的组合重音符号 (\u0301):

using System;
using System.Text.RegularExpressions;
                    
public class Program
{
    public static void Main()
    {
        string text = "✧ ́зу́б";
        string r1 = text.Replace(" \u0301", " ");
        string r2 = Regex.Replace(text, " \u0301́", " ", RegexOptions.CultureInvariant);
        Console.WriteLine(r1); // ✧ зу́б
        Console.WriteLine(r2); // ✧ ́зу́б
        Console.WriteLine(r1 == r2); // False
    }
}

简单的text.Replace() 按预期工作。为什么正则表达式不起作用?

我在 T-SQL 中有一个 similar issue,它是通过指定二进制排序规则来解决的。我认为RegexOptions.CultureInvariant 可能会成功,但它没有。

【问题讨论】:

  • 看起来你在正则表达式中的\u03011 有重音
  • @PhuNgo 你是对的。谢谢!

标签: c# regex


【解决方案1】:

至少从正则表达式替换中删除尖锐重音" \u0301́"。其次,并非所有的“”空间都是相同的。为避免制表符与空格的任何可能情况,我建议您删除空格并使用\s 的一般空格。

因此,将" \u0301́" 更改为"\s+\u0301" 以避免两个可能的故障点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2012-12-23
    • 2019-07-11
    • 2020-02-19
    • 2020-06-14
    相关资源
    最近更新 更多