ruby中大写单词的正则表达式

ruby中大写单词的正则表达式,ruby,regex,string,Ruby,Regex,String,我对正则表达式不是很在行,所以谢谢你的帮助 我需要解析一个字符串,比如“为午餐注册”来提取大写单词。我用的是Ruby 所以我需要像这样的东西 string = "sign me up for LUNCH" keyword = string.gsub(/some_rexex/, '') # keyword should == 'LUNCH' 再次感谢您的帮助使用string.scan函数而不是string.gsub来获取您想要的特定字符串 > "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"
>“为我注册午餐”。扫描(/(?“午餐”
  • (?否定的lookback,断言匹配前面不会有非空格字符
  • [A-Z]+
    匹配一个或多个大写字母
  • (?!\S)
    负前瞻,它断言匹配后不会有非空格字符

对于正则表达式解决方案,Avinash Raj肯定有正确的解决方案。我想我应该给他添加一个替代解决方案

如果您不想完全使用正则表达式,您可以迭代讨论中的字符串,只需将每个单词与其upcase值进行比较

string = "sign me up for LUNCH"
string.split(" ").each do |word|
    if (word == word.upcase)
        puts word
    end
end 

如果您需要在匹配该单词或其周围的文本后立即对其进行处理,则此方法会很有帮助。

这几乎是可行的,但如果大写单词后有一个单词,它也会返回该单词。例如:“今天为我注册午餐”返回“今天午餐”然后您需要使用string.scan函数。@DougSteinberg根据您的输入,您可能希望使用
\p{Upper}
(或
[:Upper:]]
)而不是
[A-Z]
,后者将不匹配,例如
“inscrivez moi pour le DÉJEUNER”
[A-Z]+
获取1到多个大写ascii字母。我喜欢这个主意。我也在考虑做类似的事情,但似乎regex是一种更有效的方法