我在Ruby工作,我需要一个正则表达式来检测最后一个空格在空白之前返回的所有内容。如果有帮助,字符串的最后一部分是一个数字。
示例字符串:
a = "Dallas Cowboys 34"
这是迄今为止我能想出的最好的正则表达式:
irb(main):090:0> a[/\D*/]
=> "Dallas Cowboys "
有什么更好的方法可以做到这一点吗?
答案 0 :(得分:3)
一种方法是使用gsub
来执行此操作。
"Dallas Cowboys 34".gsub(/ *\d+$/, '')
#=> "Dallas Cowboys"
或者您可以在不使用正则表达式的情况下执行此操作..
"Dallas Cowboys 34".split[0...-1].join ' '
#=> "Dallas Cowboys"
答案 1 :(得分:1)
由于您只是寻找最后一个空格的所有内容,因此您实际上并不需要正则表达式。您可以改为使用String#rpartition:
a.rpartition(' ')[0]
答案 2 :(得分:0)
您可以使用此正则表达式:
\d+$
并将其替换为
答案 3 :(得分:0)
您可以使用:
a.rpartition(/\D/)[0]
这样你就可以在最后一个数字之前获得所有内容。
答案 4 :(得分:0)
您可以使用正则表达式
r = /.*?(?=\s+\S*$)/
"Dallas Cowpokes 34"[r] #=> "Dallas Cowpokes"
"Dallas Cowpokes 34 "[r] #=> "Dallas Cowpokes 34"
?
关注.*
会使后者“非贪婪”。(?=...)
是一个(零宽度)正向前瞻,意味着匹配必须紧跟一个匹配/\s+\S*$/
的子字符串;也就是说,一个或多个空格字符后跟零个或多个非空格字符,后跟行尾。如果正则表达式不是非贪婪的,.*
会吞噬除最后一个空格字符之外的所有字符:
"Dallas Cowpokes 34"[/.*(?=\s+\S*$)/] #=> "Dallas Cowpokes "