我是 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
Run Code Online (Sandbox Code Playgroud)
我正在使用这个正则表达式来选择所有标题:
^[A-Z]{2,}\s?([A-Z]{2,}\s?)*$
Run Code Online (Sandbox Code Playgroud)
但是,它匹配所有不包含字符的标题,如 ?、Š、Ž(斯洛文尼亚字符)。
所以我猜 [AZ] 只匹配 ASCII 字符?我怎么能得到utf8?
你是对的,当你定义 ASCII range 时A-Z,匹配只针对那些字符。这与计算机上字符的历史有关,随着时间的推移,添加了越来越多的字符,并且它们并不总是以易于使用的编码方式进行结构化。
您可以通过列出它们来制作与您需要的斯洛文尼亚字符匹配的更大字符类。
但是有一条捷径。其他人已经向 Unicode 数据添加了必要的数据,以便您可以为“所有大写字符”编写更短的匹配: /[[:upper:]]/。有关更多信息,请参阅http://ruby-doc.org//core-2.1.4/Regexp.html。
仅通过此调整更改您的正则表达式:
^[[:upper:]]{2,}\s?([[:upper:]]{2,}\s?)*$
Run Code Online (Sandbox Code Playgroud)
您可能需要进一步调整它,例如它不会匹配标题“I AM A HEADING”,因为匹配坚持每个单词至少有两个字母长。
没有看到你所有的例子,我可能会简化组匹配,只允许在任何地方使用空格:
^[[:upper:]\s]+$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |