2011-07-12 4 views
7

Мне нужно регулярное выражение в программе на C#.Regex акцент нечувствителен?

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

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

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

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

Знаете ли вы что-то вроде этого?

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

+0

Обеспечивает не совпадающие акцентированные символы –

+0

ли вы попробовать. он должен: Соответствует любому одиночному символу, кроме символа новой строки – MrFox

+2

Можете ли вы показать нам, что вы пробовали * в коде *? –

ответ

4

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

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

Он соответствует этой целой строке. –

+0

Да, извините, я использовал RegexOptions.CultureInvariant, потому что мне нужно, чтобы он был чувствительным к регистру :) – J4N

0

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

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

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

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

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

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

+0

Вы противоречите себе. Я имею в виду, что вы говорите: '\ w' соответствует любому слову и эквивалентно' [A-Za-z0-9_] ' –

0

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

[\u00E9-\u00F8\w] 
2

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

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

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

Update:

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

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

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

11

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

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

How do I remove diacritics (accents) from a string in .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" 
+0

на самом деле я допустил ошибку, регулярное выражение не принимало мое акцентированное слово, но это было не из-за акцент, но из-за "-". Мне очень жаль, что я тебя освобожу. «\ w» фактически работает – J4N

 Смежные вопросы

  • Нет связанных вопросов^_^