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
(не пробел).
Может быть, это поможет, если вы покажете несколько примеров.
Можете ли вы попробовать это и посмотреть, работает ли это:
[\u00E9-\u00F8\w]
Не подгоняйте меня за это, но если вы просто пытаетесь сопоставить имя файла, то почему бы не пойти другим путем и использовать исключенные символы?
[^<>:"/\|?*]
Ты пробовал. он должен: Соответствует любому отдельному символу, кроме символа новой строки. \w: Соответствует любому символу слова, включая подчеркивание. Эквивалент "[A-Za-z0-9_]". Поэтому имеет смысл исключать буквы с акцентом.
http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet