Ответ 1
В этом примере для меня работает case-insensite:
string input [email protected]"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı";
string pattern = @"\w+";
MatchCollection matches = Regex.Matches (input, pattern, RegexOptions.IgnoreCase);
Мне нужен Regex в программе на С#.
Я должен захватить имя файла с определенной структурой.
Я использовал класс char \w
, но проблема в том, что этот класс не соответствует ни одному символу с акцентом.
Тогда как это сделать? Я просто не хочу помещать наиболее часто используемые акцентированные буквы в свой шаблон, потому что теоретически мы можем поставить каждый акцент на каждой букве.
Таким образом, я думаю, что, возможно, существует синтаксис, скажем, что мы хотим, чтобы регистр не учитывался (или класс, который учитывает ударение), или параметр Regex, который позволяет мне не учитывать регистр.
Вы знаете что-нибудь подобное?
большое спасибо
В этом примере для меня работает case-insensite:
string input [email protected]"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı";
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} .]
Update:
ОК, я понял, что \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