我有一个名为“string”的字符串,其中包含六行。 我想从每行的末尾删除一个“Z”(每个都有),并将每行中的第一个字符大写(忽略数字和空格;例如,“1。apple” - >“1。Apple”)
我知道如何做到这一点,但不知道如何在Ruby中做到这一点。我该如何做到这一点?一个循环?语法是什么?
答案 0 :(得分:2)
使用正则表达式(参见String#gsub
):
s = <<EOS
1. applez
2. bananaz
3. catz
4. dogz
5. elephantz
6. fruitz
EOS
puts s.gsub(/z$/i, '').gsub(/^([^a-z]*)([a-z])/i) { $1 + $2.upcase }
# /z$/i - to match a trailing `z` at the end of lines.
# /^([^a-z]*)([a-z])/i - to match leading non-alphabets and alphabet.
# capture them as group 1 ($1), group 2 ($2)
输出:
1. Apple
2. Banana
3. Cat
4. Dog
5. Elephant
6. Fruit
答案 1 :(得分:1)
我会通过将问题分解为更小的步骤来解决这个问题。在我们解决了每个较小的问题后,您可以将它们重新组合在一起,以获得更优雅的解决方案。
鉴于falsetru提出的初始字符串:
s = <<EOS
1. applez
2. bananaz
3. catz
4. dogz
5. elephantz
6. fruitz
EOS
substrings = s.split(/\n/)
这使用String
类&#39; split
方法和正则表达式。它搜索所有出现的换行符(反斜杠-n)并将其视为分隔符,根据此分隔符将字符串拆分为子字符串。然后它将所有这些子串抛出到一个数组中,我们将其命名为substrings
。
substrings.each do |substring|
.
# Do stuff to each substring
.
end
这是在Ruby中迭代数组的一种形式。您调用Array
的{{1}}方法,并为其提供一个代码块,该代码块将在阵列中的每个元素上运行。在我们的示例中,我们将在代码块中使用变量名each
,以便我们可以为每个substring
执行 stuff 。
substring
现在,当我们遍历数组时,我们要做的第一件事就是删除每个字符串末尾的 z 字符。您可以使用substrings.each do |substring|
substring.gsub!(/z$/, '')
end
gsub!
方法执行此操作,这是一种搜索和替换方法。此方法的第一个参数是您正在寻找的正则表达式。在这种情况下,我们正在寻找一个String
后跟字符串结尾(用美元符号表示)。第二个参数是一个空字符串,因为我们想要替换没有找到的内容(另一种说法 - 我们只想删除已发现的内容)。
z
substrings.each do |substring|
substring.gsub!(/z$/, '')
index = substring.index(/[a-zA-Z]/)
end
类还有一个名为String
的方法,它将返回与您提供的正则表达式匹配的字符串第一次出现的索引。在我们的例子中,由于我们想要忽略数字,符号和空格,我们实际上只是在查找子字符串中第一个字母的第一个字母。要做到这一点,我们使用正则表达式index
- 这基本上说,&#34;找到我在小A到小Z或从大A到大Z的范围内的任何东西。&#34;现在,我们有一个/[a-zA-Z]/
(使用我们的示例字符串,index
是3)。
index
根据我们找到的索引值,我们希望将该索引处的字母替换为相同的字母,但是大写。
substrings.each do |substring|
substring.gsub!(/z$/, '')
index = substring.index(/[a-zA-Z]/)
substring[index] = substring[index].capitalize
end
数组重新组合为一个由换行符分隔的单字符串。现在我们已经完成了每个子字符串所需要做的一切,我们的substrings
迭代器块结束了,我们在each
数组中得到了我们需要的东西。要将数组作为单个字符串重新组合在一起,我们使用substrings
类的join
方法。
Array
有了这个,我们现在有一个名为result = substrings.join("\n")
的{{1}},它应该是你正在寻找的。 p>
一旦我们整理了所有步骤,这就是整个解决方案的样子:
String