您可能已经知道,Ruby中的字符串被称为第一类对象,它使用许多方法进行查询和操作。
最基本的字符串操作操作之一是将字符串拆分为多个子字符串。例如,如果您有一个类似于“foo,bar,baz”的字符串,并且您想要三个字符串“foo”,“bar”和“baz”,则可以这样做。String类的split方法可以为您完成这一任务。
split方法最基本的用法是基于单个字符或静态字符序列拆分字符串。如果split的第一个参数是字符串,则该字符串中的字符用作字符串分隔符,而在逗号分隔的数据中,逗号用于分隔数据。
#!/usr/bin/env ruby str = "foo,bar,baz" puts str.split(",") $ ./1.rb foo bar baz有更简单的方法来划分字符串。使用正则表达式作为分隔符使split方法更加灵活。
同样,以字符串“foo,bar,baz”为例。第一个逗号后有空格,但第二个逗号后没有空格。如果字符串“”用作分隔符,则“bar”字符串的开头仍将存在空格。如果使用字符串“”(逗号后有空格),它将只与第一个逗号匹配,因为第二个逗号后面没有空格。这是非常有限的。
这个问题的解决方案是使用正则表达式作为分隔符参数,而不是字符串。正则表达式不仅允许匹配静态字符序列,还允许匹配不确定数量的字符和可选字符。
为分隔符编写正则表达式时,第一步是用文字描述分隔符是什么。在这种情况下,短语“后面可能跟一个或多个空格的逗号”是合理的。
这个正则表达式有两个元素:逗号和可选空格。空格将使用*(星或星号)量词,表示“零或更多”。在此之前的任何元素都将匹配零或更多次。例如,regex/a*/将匹配零个或多个“a”字符的序列。
#!/usr/bin/env ruby str = "foo, bar,baz" puts str.split( /, */ ) $ ./2.rb foo bar baz设想一个逗号分隔的值字符串,如“10,20,30,这是一个任意字符串”。此格式是三个数字,后跟一个注释列。此注释列可以包含任意文本,包括包含逗号的文本。为了防止拆分此列的文本,我们可以设置要拆分的最大列数。
注意:仅当带有任意文本的注释字符串是表的最后一列时,此操作才有效。
要限制split方法将执行的拆分次数,请将字符串中的字段数作为第二个参数传递给split方法,如下所示:
#!/usr/bin/env ruby str = "10,20,30,Ten, Twenty and Thirty" puts str.split( /, */, 4 ) $ ./3.rb 10 20 30 Ten, Twenty and Thirty如果您想使用split获取除第一个项目之外的所有项目,该怎么办?
其实很简单:
first,*rest = ex.split(/,/)拆分方法有一些相当大的局限性。
例如字符串'10,20',鲍勃,伊芙和马洛里,'30'。其目的是两个数字,后跟带引号的字符串(可能包含逗号),然后是另一个数字。拆分无法将此字符串正确分隔为字段。
为了做到这一点,字符串扫描程序必须是有状态的,这意味着它可以记住它是否在带引号的字符串中。分割扫描程序不是有状态的,因此它无法解决像这样的问题。
... 今天我们来看看如何在iOS 11中使用新iPad Dock的功能。 ...
... 没有一个大的CSV文件方便,但想在家玩吗?我正在使用示例中的covd-19开放研究数据集,您也可以下载和使用这些数据集。 ...
...面的应用程序将为您提供一些不同的选项,以满足大多数使用情况。选择一个合适的,你会有你的大文件分裂成可管理的块在任何时候。 ...
... 如果您需要在Excel中分离名字和姓氏,您可以使用一些灵活的选项。这不仅包括名字和姓氏,还包括中间名、前缀和后缀。下面是一个有用的指南,向您展示如何在Excel中拆分名称。 ...
...做什么的?是否打开同一文档的两个实例,并在它们之间使用Alt+Tab?或者微软Word中有没有一个功能让它更简单? ...
...电缆中的反盗版措施。它通过在视频播放设备和屏幕之间使用验证过程来保护内容。 ...
...函数,可以将一个电子表格列拆分为两个。下面介绍如何使用“文本到列”和“快速填充” 如何在excel中使用“文本到列” 通过单击第一个单元格并向下拖动到列中的最后一个单元格,选择要拆分的单元格。在我们的示例中,...
...非常棒。但添加第二个应用程序可能会让人费解,除非你使用的是带键盘的平板电脑。下面介绍如何使用键盘从搜索中快速打开拆分视图中的iPad应用程序。 您可能熟悉在iPad上使用拆分视图的传统方法。您可以向上滑动以打开Doc...
...在拆分视图或幻灯片中打开两个受支持的应用程序。我们使用的是分割视图,但在幻灯片中打开两个应用程序同样容易。 要使用拆分视图,请打开一个应用程序,然后从屏幕底部慢慢向上滑动以打开Dock。将手指放在第二个应用...