从字符串Regex rails中删除不是大写字母单词的所有内容

时间:2016-08-05 20:35:32

标签: ruby regex

我有一个字符串

"WELLS FARGO DEALER SERVICES May 18 06:11 4137 Reference# 10982"

我想删除所有内容以便

"WELLS FARGO DEALER SERVICES"

如何使用正则表达式执行此操作。我只想要所有的上限词。

3 个答案:

答案 0 :(得分:2)

您可以使用空字符串替换/\W*\b\w*[^\WA-Z]\w*/

或处理unicode字母:/\W*\b\w*[^\W\p{Lu}]\w*/u

要修剪字符串的结尾,可以在末尾添加|\W+\z(你可以做同样的事情来修剪开头)

demo

答案 1 :(得分:1)

这是@CasimiretHippolyte优秀答案的增强。

(?:\W*\b\w*[^\WA-Z]\w*)+|(?<!\S)[^\S\r\n]+|\W+\z|\A\W+

这将他的答案分组为一个多量化的群体 它增加了他的BOL / EOL装饰。

它还在多个空格上添加了额外的修剪,留下了一个空格 (这是因为大写词组之间有多个空格)。

扩展

    (?: \W* \b \w* [^\WA-Z] \w* )+
 |  
    (?<! \S )
    [^\S\r\n]+ 
 |  
    \W+ \z 
 |  
    \A \W+ 

答案 2 :(得分:1)

str = "WELLS FARGO DEALER SERVICES May 18 06:11 4137 Reference# 10982"

如果您只想在全部字词之间留出一个空格,那么它只是

str.split.select { |word| word =~ /\A[A-Z]+\z/ }.join(' ')
  #=> "WELLS FARGO DEALER SERVICES"