正则表达式口音不敏感?

J4N*_*J4N 12 c# regex diacritics non-ascii-characters

我需要一个C#程序中的正则表达式.

我要捕获具有特定结构的文件的名称.

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

那怎么办呢?我只是不想在我的模式中添加最常用的重音字母,因为我们理论上可以在每个字母上加上每个重音.

所以我虽然可能有一种语法,比如说我们想要一个不区分大小写(或者一个考虑重音的类),或者一个"正则表达式"选项,它允许我不区分大小写.

你知道这样的事吗?

非常感谢你

Pao*_*tti 14

您可以简单地用字母(近似)等价替换变音符号,然后使用您当前的正则表达式.

参见例如:

如何从.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"
Run Code Online (Sandbox Code Playgroud)


age*_*t-j 8

在这个例子中,Case-insensite对我有用:

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


ste*_*ema 5

使用它\p{L}而不是类\w

\p{L}是一个类别为“字母”的 unicode 代码点。所以它包括例如“äöüéè”等。

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

更新:

好的,我认识到\w在 .net 中还包括 Unicode 字母,而不仅仅是 ASCII 字母。

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

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