Unicode类别通常过于独占或过于包容,无论是否在记事本中键入(键盘映射到ASCII双/单引号,撇号等)或Microsoft Word(其中,键击映射到Unicode或Windows代码页中的非ASCII字符。)
我想使用Regex表达式构建一个文本处理器,它可以一致且详尽地识别语言元素,如:
但是,此类类别并不总是与任何特定的Unicode类别或类别集相对应。
类似“InitialQuotePunctuation”和“FinalQuotePunctuation”的类别不区分单引号和双引号,它们实际上排除了常见的ASCII双引号和单引号,它们是中性/直接的,因此既不属于初始类也不属于最终类。相反,我们在“OtherPunctuation”类别中找到它们,以及许多其他常见但不相关的标点符号。真正的问题是我们需要将单引号字符分开以获得一组完整的潜在撇号字符,因为有人可以使用这些字符作为撇号。
引号/撇号的另一个问题是,通过键入记事本可以轻松地将其用作引号/撇号的严重符号和锐符号属于“ModifierSymbol”类别。
我认为短划线和括号类别相当完整,但“DashPunctuation”类别不包括“swung dash”和“dashed overline”,它们可以在“OtherPunctuation”类别中找到,带有ASCII单/双引号。
我想检测我上面提到的语言元素需要一个两阶段的过程,其中一个Unicode字符(例如ASCII撇号)最初会被允许分成多个类别(例如撇号和单引号),以便辅助上下文检查可以解决哪个类别最适合其明显用法。
报价类别的正则表达式可能包含如下字符类:[\ p {Pi} \ p {Pf}“'],并附加检查以确保其一侧有非字母字符或其他
如何系统可靠地识别列出的四个类别中的每个类别的所有可能字符?正如我所解释的,仅凭Unicode类别是不够的。
答案 0 :(得分:-1)
以下是一个示例答案,以防没有人知道我在问什么。
要识别类别1中的字符,撇号,您必须:
要识别类别3中的字符,短划线,您必须:
等
我认为没有更简单或更可靠的方法来做到这一点。任何想法或替代技术,或为此目的合理已定义的字符集都是受欢迎的。