Регулярный акцент нечувствителен?

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


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

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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Update:

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

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

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

Ответ 4

Попробуйте следующее:

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

Ответ 5

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

[\u00E9-\u00F8\w]

Ответ 6

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

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

Ответ 7

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

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