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

Regex Latin characters filter and non latin character filer

我正在开发一个程序,我需要在其中过滤非拉丁字符的单词和句子。问题是,我只找到拉丁字符词和句子,但我没有找到混合拉丁字符和非拉丁字符的词和句子。例如,"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 以及它们代表什么吗?

四个“拉丁”块是(来自http://www.fileformat.info/info/unicode/block/index.htm):

Basic Latin U+0000 - U+007F

Latin-1 Supplement U+0080 - U+00FF

Latin Extended-A U+0100 - U+017F

Latin Extended-B U+0180 - U+024F

因此,“包含”所有这些的正则表达式将是:

Regex.Match(line.Line, @"[\u0000-\u024F]+", RegexOptions.None);

而捕获块外任何内容的正则表达式将是:

Regex.Match(line.Line, @"[^\u0000-\u024F]+", RegexOptions.None);

请注意,我确实觉得“按块”执行正则表达式有点不对,尤其是当您使用拉丁块时,因为例如在基本拉丁块中您有控制字符(如换行符、.. .)、字母(A-Z、a-z)、数字(0-9)、标点符号(.,;:...)、其他字符($@/&...)等。

对于RegexOptions.NoneRegexOptions.IgnoreCase

的含义
  • 他们的名字很清楚

  • 你可以尝试在 MSDN 上用谷歌搜索它们

来自 https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx:

RegexOptions.None: Specifies that no options are set

RegexOptions.IgnoreCase: Specifies case-insensitive matching.

最后一个意味着如果你做 Regex.Match(line.Line, @"ABC", RegexOptions.IgnoreCase) 它将匹配 ABC, Abc, abc, ... 这个选项甚至适用于字符范围像 [A-Z] 将同时匹配 A-Za-z。请注意,在这种情况下它可能没有用,因为我建议的块应该包含大写和小写字母的大写和小写“变体”。