如何在Ruby中使用给定字符将字符串仅分成两部分?

74

我们的应用程序通过Twitter登录来从用户中提取姓名。

Twitter以单个字符串提供完整的姓名。

示例

1. "Froederick Frankenstien"
2. "Ludwig Van Beethoven"
3. "Anne Frank"

我想将字符串仅分成两个变量(firstlast),根据找到的第一个" "(空格)进行分割。

Example    First Name    Last Name 
1          Froederick    Frankenstein
2          Ludwig        Van Beethoven
3          Anne          Frank
我熟悉String#split函数,但不确定如何只分割一次。最优雅的Ruby方式™答案将被接受。

"Ludwig Van Beethoven".split(' ', 2) ["Ludwig Van", "Beethoven"]没有看到rsplit。 - Justin
感谢您的回复。在我自己实现之前,我正在寻找一个本地解决方案来解决我之前所述的行为问题。目前,我得到了标准的["Ludwig", "Van Beethoven"]。 - Justin
4个回答

175

String#split方法可以接受第二个参数,表示限制分割次数。

str.split(' ', 2)

这样应该就可以了。


4
我想我对String#split不够熟悉。谢谢 :) - Mulan
非常好,我不知道split可以带第二个参数。 - jordelver
"Ludwig Van Beethoven".split(' ', 2) ["Ludwig Van", "Beethoven"]没有看到rsplit。 - Justin
@Justin,我已经成功让它工作了:"a b c".split(" ", 2) # => ["a", "b c"] - Dorian

13
"Ludwig Van Beethoven".split(' ', 2)
第二个参数限制了你想要分割的数量。
你也可以这样做:
"Ludwig Van Beethoven".partition(" ")

6
splitpartition 的结果不同:"a b c".split(" ", 2) # => ["a", "b c"];"a b c".partition(" ") # => ["a", " ", "b c"] - Dorian

8
.split()的第二个参数指定要进行多少次拆分:
'one two three four five'.split(' ', 2)

输出结果:

>> ruby -e "print 'one two three four five'.split(' ', 2)"
>> ["one", "two three four five"]

6

替代方案:

    first= s.match(" ").pre_match
    rest = s.match(" ").post_match

如果找不到匹配项,这将返回一个错误(nil)。 - montrealmike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接