【发布时间】:2011-03-25 22:56:44
【问题描述】:
def normalized?
matches = match(/[^A-Z]*/)
return matches.size == 0
end
这是我对字符串进行操作的函数,检查字符串是否只包含大写字母。它可以很好地排除不匹配,但是当我在像"ABC" 这样的字符串上调用它时,它说不匹配,因为显然matches.size 是 1 而不是零。里面好像有一个空元素。
谁能解释一下原因?
【问题讨论】:
-
如果您的 Ruby 版本支持
\p{Lu},您总是希望使用它或[\p{Lu}\p{Lt}]。[A-Z]是在处理比打孔卡更现代的任何文本的代码中要刻意避免的那些代码气味反模式之一。 -
好的,为什么这样更可取?它的速度是否优于 [A-Z]?
-
@Samuel - 为避免 unicode 十字军,指定您只关心识别行而不是包含字母 [A-Z] 如果这样做。
-
Samuel:如果正确性不重要,我可以让任何东西运行得无限快。所以呢?不是 [A-Z] 慢,而是这是错误的。
\p{Lu}更好,尽管它仍然缺少 42 个大写代码点。 -
我猜 \p{Lu} 也适用于 Ä 等字母?在我的情况下,虽然我严格只支持字母 A 到 Z,所以我想知道在我的情况下只使用 A-Z 不是更快吗?