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

Bin*_*Tie 2 c# regex ascii non-ascii-characters

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

\n\n
Match match = Regex.Match(line.Line, @"[^\\u0000-\\u007F]+", RegexOptions.IgnoreCase);\n\nif (match.Success)\n{\n    line.Line = match.Groups[1].Value;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我没有发现例如与非拉丁字母单词或句子混合的情况:“Hell\xc3\xb8 I am s\xc3\xb8mthing”。

\n\n

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

\n

xan*_*tos 6

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

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

Latin-1 补充 U+0080 - U+00FF

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

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

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

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

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

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

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

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

  • 他们的名字很清楚

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

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

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

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

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