我是ruby的新手,我正在尝试使用正则表达式。
我的文字看起来像是:
HEADING
Some text which is always non capitalized. Headings are always capitalized, followed by a space or nothing more.
YOU CAN HAVE MULTIPLE WORDS IN HEADING
我正在使用这个正则表达式来选择所有标题:
^[A-Z]{2,}\s?([A-Z]{2,}\s?)*$
然而,它匹配所有不包含字符的标题,如Č,Š,Ž(斯洛文尼亚字符)。
所以我猜[A-Z]只匹配ASCII字符?我怎么能得到utf8?
答案 0 :(得分:4)
当你定义ASCII范围A-Z
时,你是正确的,匹配只是针对那些字符。这与计算机上的字符历史有关,随着时间的推移,越来越多的字符被添加,并且它们并不总是以易于使用的方式编码。
你可以制作一个更大的字符类,通过列出它们来匹配你需要的斯洛文尼亚字符。
但是有一条捷径。其他人已经为Unicode数据添加了必要的数据,因此您可以为"所有大写字符":/[[:upper:]]/
编写较短的匹配项。有关详情,请参阅http://ruby-doc.org//core-2.1.4/Regexp.html。
仅通过此调整更改正则表达式:
^[[:upper:]]{2,}\s?([[:upper:]]{2,}\s?)*$
您可能需要进一步调整,例如它与标题不匹配" I AM A HEADING"由于比赛坚持每个单词至少有两个字母。
如果没有看到所有示例,我可能会简化组匹配并在任何地方允许空格:
^[[:upper:]\s]+$
答案 1 :(得分:2)