正则表达式不能在土耳其语字符上正常工作

Regex does not work properly on Turkish Characters

我的正则表达式有问题。我写了一些代码来检查文本是否匹配,例如订购号。并在 Regexr 上测试我的正则表达式。例如,用户写了“3'üncü”,但正则表达式不匹配。但是如果用户写 9'uncu 然后正则表达式得到匹配。我的正则表达式是;

([0-9]*)(([-/.]|[\w])([n][c][ıIiİuUüÜ]))|([0-9]*)(([-/.]|[\w])([ıIiİuUüÜ][n][c][ıIiİuUüÜ]))

我可以说,正则表达式捕获了土耳其字符,但不能捕获英文字符。这有什么问题?感谢您的帮助。

您的正则表达式工作正常。

下面是一些测试代码:

using System;
using System.Text.RegularExpressions;


public class Test
{
    public static void Main()
    {
        var m = Regex.Match("3'üncü", @"([0-9]*)(([-/.]|[\w])([n][c][ıIiİuUüÜ]))|([0-9]*)(([-/.]|[\w])([ıIiİuUüÜ][n][c][ıIiİuUüÜ]))");
        Console.WriteLine(m.Success);
        Console.WriteLine(m.Value);
    }
}

这会打印:

True
üncü

这里是 demo

可能是您没有使用适当的编码保存 .cs 文件。这是必要的,因为代码(您构建正则表达式的文字字符串)包含在默认编码中无法表示的字符(在我的例子中,是 Western European, CP 1252).

要将文件保存为 Unicode,select 从菜单 文件 -> 高级保存选项 和 select Unicode(UTF-8) 编码。