我不太擅长使用正则表达式,感谢您的帮助。
我需要解析这样一个字符串:“sign me up for LUNCH”,以提取出大写单词。我在使用Ruby。
所以我需要类似于以下代码:
string = "sign me up for LUNCH"
keyword = string.gsub(/some_rexex/, '')
# keyword should == 'LUNCH'
感谢您的帮助。
使用 string.scan
函数代替 string.gsub
来获取你想要的特定字符串。
> "sign me up for LUNCH".scan(/\b[A-Z]+\b/)[0]
=> "LUNCH"
\b
被称为单词边界,它匹配单词字符和非单词字符之间的位置。
或者
> "sign me up for LUNCH".scan(/(?<!\S)[A-Z]+(?!\S)/)[0]
=> "LUNCH"
(?<!\S)
负向回顾后发断言,用于断言匹配项之前没有非空格字符。[A-Z]+
匹配一个或多个大写字母。(?!\S)
负向先行断言,用于断言匹配项之后没有非空格字符。\p{Upper}
(或[[:upper:]]
)而不是[A-Z]
,因为它无法匹配例如"inscrivez-moi pour le DÉJEUNER"。 - matt对于正则表达式的解决方案,Avinash Raj绝对有正确的解决方案。我想我可以提供另一种替代方案。
如果你想完全避免使用正则表达式,你可以迭代查询字符串,并将每个单词与其大写值进行比较。
string = "sign me up for LUNCH"
string.split(" ").each do |word|
if (word == word.upcase)
puts word
end
end
如果您需要在匹配单词时立即对其进行操作,那么这种方法可能会很有帮助。
[A-Z]+
表示匹配一个或多个大写 ASCII 字母。 - user557597