使用“拆分”方法

您可能已经知道,Ruby中的字符串被称为第一类对象,它使用许多方法进行查询和操作。...

您可能已经知道,Ruby中的字符串被称为第一类对象,它使用许多方法进行查询和操作。

Businesswoman working on computer

最基本的字符串操作操作之一是将字符串拆分为多个子字符串。例如,如果您有一个类似于“foo,bar,baz”的字符串,并且您想要三个字符串“foo”,“bar”和“baz”,则可以这样做。String类的split方法可以为您完成这一任务。

“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'。其目的是两个数字,后跟带引号的字符串(可能包含逗号),然后是另一个数字。拆分无法将此字符串正确分隔为字段。

为了做到这一点,字符串扫描程序必须是有状态的,这意味着它可以记住它是否在带引号的字符串中。分割扫描程序不是有状态的,因此它无法解决像这样的问题。

  • 发表于 2021-10-10 08:20
  • 阅读 ( 170 )
  • 分类:编程

你可能感兴趣的文章

使用ios 11的ipad dock实现更好的多任务处理和应用程序切换

... 今天我们来看看如何在iOS 11中使用新iPad Dock的功能。 ...

  • 发布于 2021-03-12 04:33
  • 阅读 ( 186 )

如何将一个巨大的csv excel电子表格分割成单独的文件

... 没有一个大的CSV文件方便,但想在家玩吗?我正在使用示例中的covd-19开放研究数据集,您也可以下载和使用这些数据集。 ...

  • 发布于 2021-03-12 16:05
  • 阅读 ( 701 )

如何在windows中拆分和合并大文件

...面的应用程序将为您提供一些不同的选项,以满足大多数使用情况。选择一个合适的,你会有你的大文件分裂成可管理的块在任何时候。 ...

  • 发布于 2021-03-14 09:31
  • 阅读 ( 444 )

如何在excel中区分名字和姓氏

... 如果您需要在Excel中分离名字和姓氏,您可以使用一些灵活的选项。这不仅包括名字和姓氏,还包括中间名、前缀和后缀。下面是一个有用的指南,向您展示如何在Excel中拆分名称。 ...

  • 发布于 2021-03-21 09:34
  • 阅读 ( 425 )

如何冻结word文档的一部分以便于参考

...做什么的?是否打开同一文档的两个实例,并在它们之间使用Alt+Tab?或者微软Word中有没有一个功能让它更简单? ...

  • 发布于 2021-03-24 03:46
  • 阅读 ( 259 )

如何将一个hdmi信号拆分为多个显示器(和3个高质量hdmi拆分器)

...电缆中的反盗版措施。它通过在视频播放设备和屏幕之间使用验证过程来保护内容。 ...

  • 发布于 2021-03-24 08:28
  • 阅读 ( 230 )

如何在mac上的拆分视图中并排使用两个应用程序

...解什么是分割视图模式,以及如何在Mac上分割屏幕以同时使用两个应用程序。 ...

  • 发布于 2021-03-27 02:23
  • 阅读 ( 225 )

如何在excel中将数据拆分为多列

...函数,可以将一个电子表格列拆分为两个。下面介绍如何使用“文本到列”和“快速填充” 如何在excel中使用“文本到列” 通过单击第一个单元格并向下拖动到列中的最后一个单元格,选择要拆分的单元格。在我们的示例中,...

  • 发布于 2021-03-31 15:48
  • 阅读 ( 199 )

如何从ipad上的搜索中快速打开应用程序

...非常棒。但添加第二个应用程序可能会让人费解,除非你使用的是带键盘的平板电脑。下面介绍如何使用键盘从搜索中快速打开拆分视图中的iPad应用程序。 您可能熟悉在iPad上使用拆分视图的传统方法。您可以向上滑动以打开Doc...

  • 发布于 2021-03-31 19:30
  • 阅读 ( 156 )

如何在ipad上的应用程序之间进行拖放

...在拆分视图或幻灯片中打开两个受支持的应用程序。我们使用的是分割视图,但在幻灯片中打开两个应用程序同样容易。 要使用拆分视图,请打开一个应用程序,然后从屏幕底部慢慢向上滑动以打开Dock。将手指放在第二个应用...

  • 发布于 2021-04-02 03:30
  • 阅读 ( 169 )
mou69287871
mou69287871

0 篇文章

相关推荐