ruby - 大写字母的正则表达式不匹配重音字符

标签 ruby regex

我是 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?

最佳答案

你是对的,当你定义 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]+$

关于ruby - 大写字母的正则表达式不匹配重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28715837/

相关文章:

ruby - 以 DRY 方式跨 rspec 规范共享工厂

ruby-on-rails - 如何测试使用系统命令的代码

regex - 纯粹使用 bash 正则表达式压缩工作目录

ruby - 在 Ruby 中 - 如何获取 gsub!(bang) 如果不匹配则不返回 nil 并使其表现得像 .gsub

regex - 如何使用# 作为 CoffeeScript heregex 的一部分?

java - 动态定义 CSV 文件的字段分隔符和文本限定符

ruby-on-rails - 如何在 Capybara 中获取父节点?

html - 在 Rails 3 中动态标记 div ids

Ruby XMPP4R 用户 JID

Python re.findall() 除了变量