如何在ruby中使用字符串替换(use string substitution in ruby)

拆分字符串只是操纵字符串数据的一种方法。您还可以进行替换,用另一个字符串替换字符串的一部分。例如,在一个示例字符串(foo,bar,baz)中,将中的“foo”替换为“boo”将产生“boo,bar,baz”。您可以使用string类中的sub和gsub方法执行此操作以及其他许多操作。...

拆分字符串只是操纵字符串数据的一种方法。您还可以进行替换,用另一个字符串替换字符串的一部分。例如,在一个示例字符串(foo,bar,baz)中,将中的“foo”替换为“boo”将产生“boo,bar,baz”。您可以使用string类中的sub和gsub方法执行此操作以及其他许多操作。

Man working at computer with multiple monitors.

ruby替换的许多选项

替代方法有两种。sub方法是这两种方法中最基本的,并且带来的惊喜最少。它只是将指定模式的第一个实例替换为替换。

sub只替换第一个实例,而gsub方法则用替换替换模式的每个实例。此外,sub和gsub都有sub!还有gsub!相对应的人。记住,Ruby中以感叹号结尾的方法会就地更改变量,而不是返回修改过的副本。

搜索和替换

替换方法最基本的用法是用一个静态替换字符串替换一个静态搜索字符串。在上面的示例中,“foo”被替换为“boo”。可以使用sub方法对字符串中第一次出现的“foo”进行替换,也可以使用gsub方法对所有出现的“foo”进行替换。

#!/usr/bin/env ruby a = "foo,bar,baz" b = a.sub( "foo", "boo" ) puts b $ ./1.rb foo,bar,baz gsub$ ./1.rb boo,bar,baz

灵活搜索

搜索静态字符串只能到此为止。最终,您将遇到需要匹配字符串子集或带有可选组件的字符串的情况。当然,替换方法可以匹配正则表达式而不是静态字符串。这使得它们更加灵活,几乎可以匹配任何你能想到的文本。

这个例子更真实一些。想象一组逗号分隔的值。这些值被输入到一个制表程序中,您对此没有控制权(封闭源代码)。生成这些值的程序也是封闭源代码,但它输出的数据格式不正确。有些字段在逗号后有空格,这导致制表程序中断。

一种可能的解决方案是编写一个Ruby程序作为两个程序之间的“粘合剂”或过滤器。这个Ruby程序将修复数据格式中的任何问题,这样制表器就可以完成它的工作。要做到这一点,很简单:用逗号替换逗号后面的空格。

#!/usr/bin/env ruby STDIN.each do|l| l.gsub!( /, +/, "," ) puts l end gsub$ cat data.txt 10, 20, 30 12.8, 10.4,11 gsub$ cat data.txt | ./2.rb 10,20,30 12.8,10.4,11

灵活替换

现在想象一下这种情况。除了微小的格式错误外,生成数据的程序还以科学记数法生成数字数据。制表程序不理解这一点,因此您必须替换它。显然,一个简单的gsub在这里是不行的,因为每次更换都会有所不同。

幸运的是,替换方法可以为替换参数获取一个块。每次找到搜索字符串时,匹配搜索字符串(或正则表达式)的文本都会传递到此块。块生成的值用作替换字符串。在本例中,科学记数法形式的浮点数(如1.232e4)转换为带小数点的普通数。将字符串转换为带有to_f的数字,然后使用格式字符串格式化该数字。

#!/usr/bin/env ruby STDIN.each do|l| l.gsub!( /-?\d+\.\d+e-?\d+/) do|n| "%.3f" % n.to_f end l.gsub!( /, +/, "," ) puts l end gsub$ cat floatdata.txt 2.215e-1, 54, 11 3.15668e6, 21, 7 gsub$ cat floatdata.txt | ./3.rb 0.222,54,11 3156680.000,21,7

不熟悉正则表达式?

让我们后退一步,看看正则表达式。它看起来神秘而复杂,但很简单。如果您不熟悉正则表达式,那么它们可能非常神秘。然而,一旦你熟悉了它们,它们就是描述文本的简单而自然的方法。有许多元素,其中有几个元素有量词。

这里的主要元素是\d字符类。这将匹配任何数字,字符0到9。量词+与数字字符类一起使用,表示这些数字中的一个或多个应在一行中匹配。有三组数字,两组用“.”分隔,另一组用字母“e”(表示指数)分隔。

浮动的第二个元素是减号,它使用“?”量词。这意味着这些元素中的“零或一”。因此,简而言之,在数字或指数的开头可能有负号,也可能没有负号。

另外两个元素是。(句号)字符和e字符。将所有这些结合起来,您将得到一个正则表达式(或一组匹配文本的规则),它以科学形式匹配数字(如12.34e56)。

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

你可能感兴趣的文章

红宝石(ruby)和python(python)的区别

...py扩展名保存。 数据类型 Ruby有数据类型,比如数字、字符串、数组、散列。 Python有数据类型,如数字、字符串、列表、字典、元组。 开关/外壳 Ruby支持switch case语句。 Python不支持switch case语句。 功能 在Ruby中,方法不...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 338 )

学习python?下面是如何操作字符串

使用Python可以通过多种方式操纵字符串。Python提供了各种函数、操作符和方法,可以用来操作字符串。您可以分割一个字符串,连接两个或多个字符串,在字符串中**变量,等等。 ...

  • 发布于 2021-03-11 10:21
  • 阅读 ( 328 )

最适合新手的ruby互动介绍

...言中。本教程将教您语言的绝对基本构建块(包括数字、字符串、属性和方法)。您只需要键入像“2+6”这样简单的东西,看看Ruby如何处理数学操作符。 ...

  • 发布于 2021-03-13 09:52
  • 阅读 ( 215 )

linux shell字符串中的百分比符号是做什么的?

...正在学习如何充分使用linuxshell时,您可能会对如何操作字符串以获得最佳结果感到好奇。有鉴于此,今天的超级用户问答帖子回答了一位好奇读者的问题。 今天的问答环节是由SuperUser提供的,SuperUser是Stack Exchange的一个分支,...

  • 发布于 2021-04-09 06:19
  • 阅读 ( 169 )

python(python)和红宝石(ruby)的区别

...例的属性,而不是整个类的属性。与Python不同,Ruby中的字符串是可变的,但是可以使用freeze方法进行更改。事实上,实际上Ruby中的所有东西在默认情况下都是可变的,并且可以修改。 框架 –Django、Flask、web2py、Bottle、Google App...

  • 发布于 2021-06-25 22:26
  • 阅读 ( 246 )

使用snippits自动重复键入

...。接下来,我们将创建一个目录,在其中存放自定义文本字符串。在终端或文件浏览器中,在主目录中创建“.snippits”文件夹;命令行代码为:sudo mkdir~/.snippits在我们真正开始之前还有一个任务。在.snippits目录中创建一个名为“...

  • 发布于 2021-07-30 18:16
  • 阅读 ( 125 )

极客生活:如何在你的家庭电脑上托管个人维基

...机位于带防火墙的家庭路由器后面,请参阅Lifehacker功能如何在防火墙后面访问您的家庭服务器。还有一些建议:Get your Instiki wiki to start up whenever your computer's on with a simple batch script. Save the following into a file named startwiki.bat: cd \insti...

  • 发布于 2021-08-03 04:14
  • 阅读 ( 159 )

ruby中的全局变量

...同样,此变量的名称取自UNIX shell。 $\ gets读取的最后一个字符串。对于那些从Perl来到Ruby的人来说,这个变量可能是一个混淆点。在Perl中,$\变量的含义类似,但完全不同。在Perl中,$\保存最后一条语句的值,在Ruby中,它保存上...

  • 发布于 2021-09-05 06:00
  • 阅读 ( 175 )

如何在ruby中组合数组(combine arrays in ruby)

“组合数组的最佳方式是什么?”这个问题相当模糊,可能意味着一些不同的事情。 串联 连接是将一个事物附加到另一个事物上。例如,将数组[1,2,3]和[4,5,6]连接起来将得到[1,2,3,4,5,6]。这可以在Ruby中通过几种方式实现。 ...

  • 发布于 2021-09-12 07:29
  • 阅读 ( 210 )

ruby中的“require”方法

... 使用“require”方法 require方法将所需文件的名称作为字符串,作为单个参数。这可以是文件的路径,如./lib/some_library.rb,也可以是缩写名,如some_library。如果参数是路径和完整的文件名,require方法将在那里查找该文件。但...

  • 发布于 2021-09-12 23:04
  • 阅读 ( 151 )
EP4e57F2
EP4e57F2

0 篇文章

相关推荐