Regex重音不敏感

本文关键字:Regex | 更新日期: 2023-09-27 18:02:04

我需要C#程序中的Regex


我必须捕获一个具有特定结构的文件的名称。

我使用了'w字符类,但问题是这个类与任何重音字符都不匹配。

那该怎么做呢?我只是不想把最常用的重音字母放在我的模式中,因为理论上我们可以把每个重音都放在每个字母上。

因此,我认为可能有一种语法,说我们想要一个不区分大小写的(或一个考虑重音的类(,或者一个允许我不区分大小字母的Regex选项。

你知道这样的事情吗?

非常感谢

Regex重音不敏感

您可以简单地将变音符号替换为字母(接近-(的等价符号,然后使用当前的regex。

参见示例:

如何从中的字符串中删除变音符号(重音符号(。NET?

static string RemoveDiacritics(string input)
{
    string normalized = input.Normalize(NormalizationForm.FormD);
    var builder = new StringBuilder();
    foreach (char ch in normalized)
    {
        if (CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark)
        {
            builder.Append(ch);
        }
    }
    return builder.ToString().Normalize(NormalizationForm.FormC);
}
string s1 = "Renato Núñez David DeJesús Edwin Encarnación";
string s2 = RemoveDiacritics(s1);
// s2 = "Renato Nunez David DeJesus Edwin Encarnacion"

不区分大小写在本例中适用:

     string input =@"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı";
     string pattern = @"'w+";
     MatchCollection matches = Regex.Matches (input, pattern, RegexOptions.IgnoreCase);

使用此'p{L}而不是类'w

'p{L}是一个类别为"letter"的unicode代码点。因此,它包括例如"äüéè"等等

你也可以在你自己的字符类中使用它,例如,如果你想包括空格或像['p{L} .] 这样的点

更新:

好的,我知道.net中的'w也包括Unicode字母,而不仅仅是ASCII字母。

所以我不确定你在问什么。如果你想允许那些看起来像字母但实际上不是的东西,那么我认为你最终会使用'S(而不是空白(。

如果你展示一些例子,也许会有所帮助。

试试这个:

 String pattern = @"['p{L}'w]+"; 

你能试试这个吗?看看它是否有效:

['u00E9-'u00F8'w]

不要因此而抨击我,但如果你只是想匹配一个文件名,为什么不走另一条路,使用排除的字符呢?

 [^<>:"/'|?*]

你试过了吗。它应该:匹配除换行符之外的任何单个字符。''w: 匹配包括下划线在内的任何单词字符。相当于"[A-Za-z0-9_]"。因此,排除重音字母是有道理的。

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet