捕获所有大写字母块/组

时间:2015-03-04 09:10:59

标签: ruby regex

我试图在以下示例字符串中提取所有大写字母集:

"ABCDE: Something ABC DEF GHI others plus JKL MNO and PQR"

我正在寻找:

["ABCDE", "ABC DEF GHI", "JKL MNO", "PQR"]

我有以下正则表达式:

mystring.scan(/\b[A-Z][A-Z0-9]+\b(?:\s[A-Z][A-Z0-9]+)+/) 
#=> ["ABC DEF GHI", "JKL MNO"] 

不太确定这里缺少什么。希望得到一些建议。

2 个答案:

答案 0 :(得分:2)

您只需要将+替换为*,因为+重复前一个标记一次或多次*重复前一个标记零次或多次。< / p>

> str.scan(/\b[A-Z][A-Z0-9]+\b(?:\s[A-Z][A-Z0-9]+)*/)
=> ["ABCDE", "ABC DEF GHI", "JKL MNO", "PQR"]

答案 1 :(得分:0)

考虑到这一点,它可能会简化正则表达式,但可能需要在外部进行一些处理。

text = "ABCDE: Something ABC DEF GHI others plus JKL MNO and PQR"
text.scan(/\b[A-Z\s]+\b/).map { |s| s.strip }.reject &:empty? # => ["ABCDE", "ABC DEF GHI", "JKL MNO", "PQR"]