我需要一个C #程序中的正则表达式。
我必须捕获具有特定结构的文件的名称。
我使用了\w
char 类,但问题是这个类不匹配任何重音字符。
那么如何做到这一点呢?我只是不想将最常用的重音字母放在我的模式中,因为理论上我们可以将每个重音字母放在每个字母上。
所以我虽然可能有一个语法,说我们想要一个不区分大小写的(或一个考虑重音的类),或者一个允许我不区分大小写的正则表达式选项。
你知道这样的事情吗?
非常感谢你
我需要一个C #程序中的正则表达式。
我必须捕获具有特定结构的文件的名称。
我使用了\w
char 类,但问题是这个类不匹配任何重音字符。
那么如何做到这一点呢?我只是不想将最常用的重音字母放在我的模式中,因为理论上我们可以将每个重音字母放在每个字母上。
所以我虽然可能有一个语法,说我们想要一个不区分大小写的(或一个考虑重音的类),或者一个允许我不区分大小写的正则表达式选项。
你知道这样的事情吗?
非常感谢你
您可以简单地用字母(接近)等价替换变音符号,然后使用您当前的正则表达式。
参见例如:
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"
在此示例中,Case-insensite 对我有用:
string input =@"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı";
string pattern = @"\w+";
MatchCollection matches = Regex.Matches (input, pattern, RegexOptions.IgnoreCase);
使用这个\p{L}
而不是类\w
\p{L}
是具有“字母”类别的 unicode 代码点。所以它包括例如“äöüéè”等。
你也可以在你自己的字符类中使用它,例如,如果你想包含空格或像这样的点[\p{L} .]
更新:
好的,我认识到\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