我想分割以下字符串:
user = "Lisa: yes"
这样我才能得到“丽莎”
现在我有:
user[/([a-zA-Z].*?):/]
但它返回
"Lisa:"
如何拆分字符串以便将每个字母返回到冒号?
提前致谢!
答案 0 :(得分:7)
您可以使用:user.split(':').first
user = "Lisa: yes"
=> "Lisa: yes"
irb(main):006:0> user.split(':').first
=> "Lisa"
split方法会将您的字符串转换为数组,此数组: [' Lisa','是'] 即可。然后,您只需使用第一种方法解析它,即可获得第一项Lisa
。简单直观,因为个人而言,我讨厌正则表达式。我也喜欢Arup Rakshit回答;)
答案 1 :(得分:4)
执行以下操作:
user = "Lisa: yes"
user[/([a-zA-Z].*?):/,1] # => "Lisa"
如果提供了Regexp,则返回字符串的匹配部分。如果捕获遵循正则表达式(可能是捕获组索引或名称),则遵循正则表达式,而不是返回MatchData的组件。
答案 2 :(得分:2)
更多方法:
user[0...user.index(':')]
user.partition(':').first
user.each_line(':').first.chomp(':')
require 'stringio'
StringIO.new(user).gets(':').chomp(':')
StringIO.new(user).readline(':').chomp(':')
t = $/; $/ = ':'
user.each_line.first.chomp
StringIO.new(user).gets.chomp
StringIO.new(user).readline.chomp
$/ = t
user.chars.take_while {|c| c != ':'}.join
答案 3 :(得分:1)
尝试使用positive lookahead anchor优化原始正则表达式:
user[/[a-zA-Z].*?(?=:)/]
# => "Lisa"
答案 4 :(得分:0)
或者,还有其他几种参考方式:
# replacing anything after `:` with empty.
user.gsub(/:.*/, "")
# splitting the string around : and picking the first one.
user.split(/\s*:\s*/)[0]