Ruby 对字符串的每一行执行操作
我有一个名为“string”的字符串,它包含六行。 我想从每行末尾(每行都有)删除一个“Z”,并将每行的第一个字符大写(忽略数字和空格;例如,“1.apple”->“1.apple”) 我知道怎么做,但不知道怎么用Ruby做。我如何做到这一点?一圈?语法是什么?使用正则表达式(请参阅): 使用正则表达式(请参阅): 使用正则表达式(请参阅): 使用正则表达式(请参阅):Ruby 对字符串的每一行执行操作,ruby,Ruby,我有一个名为“string”的字符串,它包含六行。 我想从每行末尾(每行都有)删除一个“Z”,并将每行的第一个字符大写(忽略数字和空格;例如,“1.apple”->“1.apple”) 我知道怎么做,但不知道怎么用Ruby做。我如何做到这一点?一圈?语法是什么?使用正则表达式(请参阅): 使用正则表达式(请参阅): 使用正则表达式(请参阅): 使用正则表达式(请参阅): 我会把你的问题分成几个小步骤来解决。在我们解决了每个小问题之后,您可以将它们重新组合起来,以获得更优雅的解决方案 鉴于fals
我会把你的问题分成几个小步骤来解决。在我们解决了每个小问题之后,您可以将它们重新组合起来,以获得更优雅的解决方案 鉴于falsetru提出的初始字符串:
s = <<EOS
1. applez
2. bananaz
3. catz
4. dogz
5. elephantz
6. fruitz
EOS
这使用String
class'split
方法和正则表达式。它搜索所有出现的换行符(反斜杠-n)并将其视为分隔符,根据此分隔符将字符串拆分为子字符串。然后它将所有这些子字符串抛出到一个数组中,我们将其命名为substring
2.迭代你的子字符串数组来做一些事情(稍后详细介绍什么事情)
这是一种在Ruby中迭代数组的形式。调用Array
的each
方法,给它一个代码块,它将在数组中的每个元素上运行。在我们的示例中,我们将在我们的代码块中使用变量名substring
,这样我们就可以对每个substring
执行操作
3.删除每个子字符串末尾的z字符
现在,当我们遍历数组时,我们要做的第一件事是删除每个字符串末尾的z字符。您可以使用gsub执行此操作代码>字符串的方法,这是一种搜索和替换方法。此方法的第一个参数是您要查找的正则表达式。在本例中,我们要查找一个z
,后跟字符串的末尾(由美元符号表示)。第二个参数是一个空字符串,因为我们想用nothing替换已找到的内容(另一种说法是——我们只想删除已找到的内容)
4.查找每个子字符串中第一个字母的索引
String
类还有一个名为index
的方法,该方法将返回与您提供的正则表达式匹配的字符串第一次出现的索引。在我们的例子中,因为我们想要忽略数字、符号和空格,所以我们实际上只是寻找子字符串中第一个字母的第一次出现。要做到这一点,我们使用正则表达式/[a-zA-Z]/
——这基本上是说,“找到小a到小Z或大a到大Z范围内的任何东西。”现在,我们有了一个索引
(使用我们的示例字符串,索引
是3)
5.在我们找到的索引处将字母大写
根据我们找到的索引值,我们希望用相同的字母替换该索引中的字母,但大写
6.将子字符串
数组重新组合为一个由换行符分隔的字符串。
现在我们已经对每个子字符串做了所有需要做的事情,我们的每个
迭代器块都结束了,我们在子字符串
数组中得到了我们需要的东西。为了将数组重新组合为单个字符串,我们使用array
类的join
方法
result = substrings.join("\n")
有了它,我们现在有了一个名为result
的String
,这应该是您要查找的
把它们放在一起
下面是整个解决方案的外观,一旦我们将所有步骤放在一起:
substrings = s.split(/\n/)
substrings.each do |substring|
substring.gsub!(/z$/, '')
index = substring.index(/[a-zA-Z]/)
substring[index] = substring[index].capitalize
end
result = substrings.join("\n")
我会把你的问题分成几个小步骤来解决。在我们解决了每个小问题之后,您可以将它们重新组合起来,以获得更优雅的解决方案
鉴于falsetru提出的初始字符串:
s = <<EOS
1. applez
2. bananaz
3. catz
4. dogz
5. elephantz
6. fruitz
EOS
这使用String
class'split
方法和正则表达式。它搜索所有出现的换行符(反斜杠-n)并将其视为分隔符,根据此分隔符将字符串拆分为子字符串。然后它将所有这些子字符串抛出到一个数组中,我们将其命名为substring
2.迭代你的子字符串数组来做一些事情(稍后详细介绍什么事情)
这是一种在Ruby中迭代数组的形式。调用Array
的each
方法,给它一个代码块,它将在数组中的每个元素上运行。在我们的示例中,我们将在我们的代码块中使用变量名substring
,这样我们就可以对每个substring
执行操作
3.删除每个子字符串末尾的z字符
现在,当我们遍历数组时,我们要做的第一件事是删除每个字符串末尾的z字符。您可以使用gsub执行此操作代码>字符串的方法,这是一种搜索和替换方法。此方法的第一个参数是您要查找的正则表达式。在本例中,我们要查找一个z
,后跟字符串的末尾(由美元符号表示)。第二个参数是一个空字符串,因为我们想用nothing替换已找到的内容(另一种说法是——我们只想删除已找到的内容)
4.查找每个子字符串中第一个字母的索引
String
类还有一个名为index
的方法,该方法将返回与您提供的正则表达式匹配的字符串第一次出现的索引。在我们的例子中,因为我们想要忽略数字、符号和空格,所以我们实际上只是寻找子字符串中第一个字母的第一次出现。要做到这一点,我们使用正则表达式/[a-zA-Z]/
——这基本上是说,“随便找我。”
substrings.each do |substring|
.
# Do stuff to each substring
.
end
substrings.each do |substring|
substring.gsub!(/z$/, '')
end
substrings.each do |substring|
substring.gsub!(/z$/, '')
index = substring.index(/[a-zA-Z]/)
end
substrings.each do |substring|
substring.gsub!(/z$/, '')
index = substring.index(/[a-zA-Z]/)
substring[index] = substring[index].capitalize
end
result = substrings.join("\n")
substrings = s.split(/\n/)
substrings.each do |substring|
substring.gsub!(/z$/, '')
index = substring.index(/[a-zA-Z]/)
substring[index] = substring[index].capitalize
end
result = substrings.join("\n")