“L” Unicode类别是什么?

15

我发现了一些包含[^\\p{L}]的正则表达式。我知道这是使用了某种Unicode类别,但当我查看文档时,只发现以下"L"类别:

Lu  Uppercase letter    UPPERCASE_LETTER
Ll  Lowercase letter    LOWERCASE_LETTER
Lt  Titlecase letter    TITLECASE_LETTER
Lm  Modifier letter     MODIFIER_LETTER
Lo  Other letter        OTHER_LETTER

这个上下文中的L是什么?
2个回答

19

来自以下链接:http://www.regular-expressions.info/unicode.html

查看Unicode字符属性部分。

\p{L}匹配类别为“字母”的单个代码点。如果您的输入字符串是à编码为U+0061 U+0300,则匹配没有重音符号的a。如果输入编码为U+00E0,则匹配带有重音符号的à。原因是,代码点U+0061(a)和U+00E0(à)都属于类别“字母”,而U+0300属于类别“标记”。


谢谢你,也给你点个赞。我很感激你对我在@Ned Batchelder的回答中的评论/问题所做的回复。 - uTubeFan
1
有关“L”类别的“官方”参考,请参见此处:http://unicode.org/reports/tr18/#General_Category_Property - CodeClimber

3

我没有看到明确的提到,但是这个页面上的一个示例表明\\p{L}表示任何字母:

类别可以用可选的前缀Is指定:\p{L}和\p{IsL}都表示Unicode字母的类别。


这也是我想的,但是为什么以下正则表达式会用空格替换掉所有不是字母的字符呢?String.replaceAll("[^\\p{L}]", " ") - uTubeFan
2
@uTubeFan:看到你在^\\p{L}中使用了否定。所以当我像这样做"Test akd ^^%!~+_)".replaceAll("[^\\p{L}]", " "),那么输出将是Test akd 。相反,如果你像这样做"Test akd ^^%!~+_)".replaceAll("[\\p{L}]", " ");,那么输出将是 ^^%!~+_) - Favonius
@Favonius 谢谢!那么,我可以从中得出结论,^%!~+_ 不被认为是字母吗?(我基本上想用空格替换所有非字母(除了撇号 ',例如 wasn't),有什么建议吗?) - uTubeFan
@uTubeFan:刚看到你之前的评论,不管怎样,你为我省下了功夫 :) - Favonius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接