将字符串拆分为字符

时间:2014-03-17 16:06:39

标签: ruby regex

我想分割以下字符串:

user = "Lisa: yes"

这样我才能得到“丽莎”

现在我有:

user[/([a-zA-Z].*?):/]

但它返回

"Lisa:" 

如何拆分字符串以便将每个字母返回到冒号?

提前致谢!

5 个答案:

答案 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"

str[regexp, capture]的文档:

  

如果提供了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]