Ruby - 删除小写字母

时间:2012-09-11 17:10:09

标签: ruby regex

假设我有这个字符串:a = "Vallås centrum HALMSTAD" 我想删除所有小写,空格和第一个大写字母,所以我只有一个字符串a => "HALMSTAD"

我试过这样的事情:

a = "Vallås centrum HALMSTAD"
b = a.gsub(/[:lower:]/, "")
puts b

但我得到了这个输出:a => "Vaås cntum HALMSTAD"

关于如何做到这一点的任何想法?

4 个答案:

答案 0 :(得分:1)

我相信你应该匹配大写单词(包括连续的单词和可能的标点符号),并用空字符串替换其余单词。

正则表达式

\b([A-Z']+\s*)\b

这将匹配并捕获所有大写单词,包括连续单词。

Rubular link

考虑的示例字符串:

  

Vallåscentrum不是Blah HALMSTAD和BLAh

这匹配:

  

IS NOT
  哈尔姆斯塔德和

答案 1 :(得分:1)

这取决于你是否“只删除小写字符”(并保留空格),或“只保留大写字符”(并丢失空格)。我建议可能以下内容更接近您所追求的内容?

a = "Vallås centrum HALMSTAD"
b = a.gsub(/[^[:upper:]]+/, "")
puts b # => "VHALMSTAD"

答案 2 :(得分:1)

试试这个:

a = "Vallås centrum ISN'T blah Blah HALMSTAD AND "
b = a.gsub(/\b[A-Z]?[^A-Z\s']+\s*\b/, '')
puts b

这应该处理大多数小写字词,但你需要处理其他可能的情况,你有标点符号,问号,感叹号,非ASCII字符等...

你可以摆弄这个here


鉴于@TimPietzcker对非ASCII字符的评论,您可以将A-Z替换为POSIX括号表达式[[:upper:]]


<强>更新
这将是一个更完整的解决方案:

正则表达式找到大多数小写单词(这仍然可以扩展为更多符号):

\b(?:[^\s]?[[:lower:]][^\s]?)+\s*\b[?!]?

测试正则表达式here

Ruby代码:

a = "Vallås centrum ISN'T blah Blah HALMSTAD AND BlaG and bLag's? FINISH "
b = a.gsub(/\b(?:[^\s]?[[:lower:]][^\s]?)+\s*\b[?!]?/, '')
puts b

摆弄代码here

答案 3 :(得分:1)

试试这个:

your_string.split.last