正则表达式口音不敏感?
我需要一个C#程序中的正则表达式。
我要捕获具有特定结构的文件的名称。
我使用了\ w char类,但问题是这个类与任何重音字符都不匹配。
那怎么办呢? 我只是不想在我的模式中添加最常用的重音字母,因为我们理论上可以在每个字母上加上每个重音。
所以我虽然可能有一种语法,就是说我们想要一个不区分大小写(或者一个考虑重音的类),或者一个“正则表达式”选项,它允许我不区分大小写。
你知道这样的事吗?
非常感谢你
在这个例子中,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}
是一个带有“letter”类别的unicode代码点。 所以它包括例如“äöüéè”等。
您也可以在自己的角色类中使用它,如果您想要包含空格或点这样的[\p{L} .]
更新:
好吧,我认识到.net中的\w
还包括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