在Regex中使用Unicode块

时间:2015-02-17 18:14:26

标签: c# regex unicode

我正在尝试添加一个与字符串中的某些unicode组一起使用的功能。我发现this question建议使用以下解决方案,该解决方案适用于所述范围内的unicodes:

s = Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);

这很好用。

在我的研究中,我遇到了use of unicode blocks,我发现它更具可读性。

InBasic_Latin =  U+0000–U+007F

更常见的是,我看到建议人们使用实际代码本身(\u0000-\u007F)而不是这些块(InBasic_Latin)。当你需要该块的某个子集或特定的unicode时,我可以看到明确声明一个范围的好处,但是当你真的只想要使用块声明进行整个分组时,它的可读性和使用块名称的可编程性似乎更友好代替。

因此,一般来说,我的问题是为什么\u0000–\u007F被认为是比InBasic_Latin更好的语法?

1 个答案:

答案 0 :(得分:1)

这取决于您的正则表达式引擎,但有些(如.NET,Java,Perl)支持Unicode块:

if (Regex.IsMatch(subjectString, @"\p{IsBasicLatin}")) {
    // Successful match
}

其他人不喜欢(例如JavaScript,PCRE,Python,Ruby,R和其他大多数人),因此您需要手动拼出这些代码点或使用Steve Levithan's XRegExp library for JavaScript之类的扩展名。