C# 正则表达式拉丁字符过滤器和非拉丁字符过滤器

C# 正则表达式拉丁字符过滤器和非拉丁字符过滤器,c#,regex,ascii,non-ascii-characters,C#,Regex,Ascii,Non Ascii Characters,我正在开发一个程序,我需要过滤非拉丁字符的单词和句子。问题是,我只找到了拉丁字符的单词和句子,但没有找到混合了拉丁字符和非拉丁字符的单词和句子。例如,Hello是拉丁字母单词,我可以使用以下代码匹配它: Match match = Regex.Match(line.Line, @"[^\u0000-\u007F]+", RegexOptions.IgnoreCase); if (match.Success) { line.Line = match.Groups[1].Value; }

我正在开发一个程序,我需要过滤非拉丁字符的单词和句子。问题是,我只找到了拉丁字符的单词和句子,但没有找到混合了拉丁字符和非拉丁字符的单词和句子。例如,Hello是拉丁字母单词,我可以使用以下代码匹配它:

Match match = Regex.Match(line.Line, @"[^\u0000-\u007F]+", RegexOptions.IgnoreCase);

if (match.Success)
{
    line.Line = match.Groups[1].Value;
}
但我没有发现,例如,混合了非拉丁字母的单词或句子:HelløI am sømthing


另外,有人能解释什么是RegexOptions.None或RegexOptions.IgnoreCase以及它们代表什么吗?

四个拉丁语块来自:

基本拉丁语U+0000-U+007F

拉丁语-1补编U+0080-U+00FF

拉丁文扩展-A U+0100-U+017F

拉丁文扩展-B U+0180-U+024F

因此,包含所有这些内容的正则表达式是:

Regex.Match(line.Line, @"[\u0000-\u024F]+", RegexOptions.None);
Regex.Match(line.Line, @"[^\u0000-\u024F]+", RegexOptions.None);
而用于捕获块外任何内容的正则表达式是:

Regex.Match(line.Line, @"[\u0000-\u024F]+", RegexOptions.None);
Regex.Match(line.Line, @"[^\u0000-\u024F]+", RegexOptions.None);
请注意,我确实觉得按块执行正则表达式有点错误,特别是当您使用拉丁块时,因为例如在基本拉丁块中,您有控制字符,如新行、…、字母a-Z、a-Z、数字0-9、点字、;:。。。,其他字符$@/&。。。等等

关于RegexOptions.None和RegexOptions.IgnoreCase的含义

他们的名字很清楚

你可以在MSDN上用谷歌搜索一下

发件人:

RegexOptions.None:指定未设置任何选项

RegexOptions.IgnoreCase:指定不区分大小写的匹配


最后一个表示如果您执行Regex.Matchline.Line、@ABC,RegexOptions.IgnoreCase,它将匹配ABC,ABC,ABC。。。这个选项甚至可以在[A-Z]这样的字符范围内工作,这些字符范围将同时匹配A-Z和A-Z。请注意,在这种情况下,它可能是无用的,因为我建议的块应该同时包含大写和小写字母的大写和小写变体。

我一直认为èìòù是拉丁文…正则表达式不会找到Hello,因为它只会找到大于0x7F的字符,因此,安纳托斯确实会被罚款。Unicode将è描述为带GRAVE的拉丁文小写字母E。那么,BinaryTie,你想包括还是排除这样的拉丁字符?@TomBlodget。是的,我想它将包括非拉丁字符。我只需要过滤单词中包含非拉丁字符的所有单词。它只能是非拉丁字符,也可以是拉丁字符与非拉丁字符的混合字符。