Regex акцент нечувствителен? - PullRequest
9 голосов
/ 12 июля 2011

Мне нужен Regex в программе на C #.

Мне нужно захватить имя файла с определенной структурой.

Я использовал класс \ w char, но проблемав том, что этот класс не соответствует ни одному акцентированному символу.

Тогда как это сделать?Я просто не хочу помещать наиболее часто используемые акцентированные буквы в моем шаблоне, потому что мы теоретически можем ставить каждый акцент на каждой букве.

Так что я, хотя и есть синтаксис, чтобы сказать, что мы хотим, чтобы регистр не чувствовалили класс, который учитывает ударение), или параметр «Regex», который позволяет мне быть без учета регистра.

Знаете ли вы что-то подобное?

Большое спасибо

Ответы [ 7 ]

13 голосов
/ 12 июля 2011

Вы можете просто заменить диакритические знаки буквенными (почти) эквивалентами, а затем использовать команду использовать свое текущее регулярное выражение.

См. Например:

Как удалить диакритические знаки (акценты) из строки в .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"
6 голосов
/ 12 июля 2011

Case-insensite работает для меня в этом примере:

     string input =@"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı";
     string pattern = @"\w+";
     MatchCollection matches = Regex.Matches (input, pattern, RegexOptions.IgnoreCase);
4 голосов
/ 12 июля 2011

Используйте это \p{L} вместо класса \w

\p{L} - это кодовая точка Unicode с категорией "буква".Таким образом, он включает в себя, например, "äöüéè" и т. Д.

Вы также можете использовать его в своем собственном классе символов, если вы хотите, например, включить пробел или точку вроде этой [\p{L} .]

Обновление:

ОК, я понял, что \w в .net также включает буквы Unicode, а не только буквы ASCII.

Так что я не уверен, что выпросят.Если вы хотите разрешить то, что выглядит просто как буква, но это не так, то я думаю, что вы в конечном итоге будете использовать \S (не пробел).

Возможно, это поможет, если вы покажете несколько примеров.

2 голосов
/ 12 июля 2011

Попробуйте это:

 String pattern = @"[\p{L}\w]+"; 
1 голос
/ 12 июля 2011

Можете ли вы попробовать это и посмотреть, работает ли оно:

[\u00E9-\u00F8\w]
0 голосов
/ 12 июля 2011

Вы пробовали. он должен: Соответствует любому отдельному символу, кроме символа новой строки. \ w: Соответствует любому символу слова, включая подчеркивание. Эквивалент "[A-Za-z0-9_]". Поэтому имеет смысл исключать буквы с акцентом.

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

0 голосов
/ 12 июля 2011

Не подгоняйте меня за это, но если вы просто пытаетесь сопоставить имя файла, то почему бы не пойти другим путем и использовать исключенные символы?

 [^<>:"/\|?*]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...