关于C#:Regex拉丁字符过滤器和非拉丁字符过滤器

Regex Latin characters filter and non latin character filer

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

1
2
3
4
5
6
Match match = Regex.Match(line.Line, @"[^\u0000-\u007F]+", RegexOptions.IgnoreCase);

if (match.Success)
{
    line.Line = match.Groups[1].Value;
}

但是我没有发现例如混有非拉丁字母的单词或句子:"地狱?我在做什么?"。

另外,有人可以解释什么是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

因此,一个"包括"所有这些的正则表达式将是:

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

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

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

请注意,我确实认为"按块"进行正则表达式有点错误,尤其是在使用拉丁语块时,因为例如在基本拉丁语块中,您具有控制字符(例如换行符,...),字母( AZ,az),数字(0-9),标点符号(。,;:...),其他字符($ @ /&...)等。

对于RegexOptions.NoneRegexOptions.IgnoreCase的含义

  • 他们的名字很清楚

  • 您可以尝试在MSDN上搜索它们

从https://msdn.microsoft.com/zh-cn/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),它将匹配ABCABCABC,...,并且此选项即使在像[A-Z]这样的字符范围都可以匹配A-Z和< x7>。请注意,在这种情况下它可能没有用,因为我建议的块应同时包含大小写字母的大写和小写字母"变体"。