我试图在以下示例字符串中提取所有大写字母集:
"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"]
不太确定这里缺少什么。希望得到一些建议。
答案 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"]