Regex акцент нечувствителен?

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

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

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

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

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

Вы знаете что-то подобное?

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

7 ответов

Решение

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

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

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

Смотрите, например:

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

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

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

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

Обновить:

Хорошо, я понял, что \w в.net также включены буквы 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

Другие вопросы по тегам