2011-07-12 28 views
7

我需要一个C#程序中的正则表达式。正则表达方式不区分大小写?

我必须捕捉具有特定结构的文件的名称。

我用\ w char类,但问题是这个类不匹配任何重音字符。

那么该怎么做?我只是不想将最常用的重音字母放在我的模式中,因为我们理论上可以在每个字母上加上每个口音。

所以我虽然也许有一种语法,说我们想要一个不区分大小写的类(或者一个需要考虑口音的类),或者一个“正则表达式”选项,它允许我不区分大小写。

你知道这样的事吗?

非常感谢您

+0

提供非匹配重音字符 –

+0

你有没有尝试。它应该:匹配除换行符之外的任何单个字符 – MrFox

+2

您能向我们展示您在代码*中尝试过的*吗? –

回答

4

案例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]+"; 
0

你可以试试这个,看看它的工作原理:

[\u00E9-\u00F8\w] 
2

使用此\p{L}代替的类\w

\p{L}是一个类别为“letter”的unicode代码点。所以它包括例如“äöüéè”等。

您也可以使用它自己的性格类,如果你想例如包括空间或点这样[\p{L} .]

更新:

OK,我在.net中认识到,\w也包括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

相关问题