正则表达式拉丁字符过滤器和非拉丁字符过滤器
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.None
和RegexOptions.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-Z
和 a-z
。请注意,在这种情况下它可能没有用,因为我建议的块应该包含大写和小写字母的大写和小写“变体”。
我正在开发一个程序,我需要在其中过滤非拉丁字符的单词和句子。问题是,我只找到拉丁字符词和句子,但我没有找到混合拉丁字符和非拉丁字符的词和句子。例如,"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.None
和RegexOptions.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-Z
和 a-z
。请注意,在这种情况下它可能没有用,因为我建议的块应该包含大写和小写字母的大写和小写“变体”。