c# - 在正则表达式中使用 Unicode block

标签 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) 而不是这些 block (InBasic_Latin)。当您需要该 block 的某些子集或特定的 unicode 时,我可以看到显式声明范围的好处,但是当您真的只想使用 block 声明对整个分组进行分组时,使用 block 名称似乎对可读性甚至可编程性更友好相反。

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

最佳答案

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

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

其他代码点没有(例如 JavaScript、PCRE、Python、Ruby、R 和大多数其他代码点),因此您需要手动拼出这些代码点或使用像 Steve Levithan's XRegExp library for JavaScript 这样的扩展名.

关于c# - 在正则表达式中使用 Unicode block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568246/

相关文章:

c# - 当值包含空格时,数据集上的 UniqueConstraint 失败

Python替换,使用数组中的模式

来自 cStringIO 的 Python "\x00"填充/utf-32 字符串

用于冒号的 Javascript 正则表达式?

python - 带有 mrjob 的 Unicode 文件

c++ - Visual Studio C++ UNICODE 相关故障排除循环

C# 具有多个分支的链表

c# - VS.NET 应用程序图

c# - 使用 Migrator.NET 从客户端进行 DB2 REORG TABLE

regex - 在 N 个字符后最接近的逗号处拆分一个长字符串并循环每个字符串