3
How best to replace a pattern with a string keeping the box?
For example, DAdo -> LAdo or dado -> lado.
3
How best to replace a pattern with a string keeping the box?
For example, DAdo -> LAdo or dado -> lado.
3
You use the method gsub of the string to do the substitution using regular expression, but instead of passing a second fixed parameter, use a block of code to process each snippet found according to upper and lower case, which is already another challenge.
I made a simple implementation of this process in two steps.
First, the function below converts the characters into a string alvo according to the string padrao:
def samecase(padrao, alvo)
alvo.split("").zip(padrao.split(""))
.map { |a, p| p.upcase == p ? a.upcase : a.downcase }
.join("")
end
The first line of the function uses the function split to break the two strings into character arrays. Then, the function zip creates a pair array. For example, strings bar and foo would generate the array `[b,f],[a,o],[r,o]].
Then, in the second line, the function map generates a new array based on the value returned by the code block. The block checks whether the current character p string padrao is uppercase and if it is it returns the corresponding character a string alvo uppercase, otherwise it force lowercase.
The last line simply joins the resulting characters into a new string.
Now, using the function described above, we can make a new function to perform the substitution by following the pattern:
def replace_with_case(str, padrao, novo_valor)
str.gsub(/#{padrao}/i) { |matched| samecase(matched, novo_valor) }
end
The above routine takes a string str which will be searched for the value of the parameter padrao and then replaced by novo_valor transformed with the same "boxes" of the found text.
Browser other questions tagged ruby regex
You are not signed in. Login or sign up in order to post.
That’s the idea. Since I’m a beginner in language there are some things I still need to study to get a better understanding of your code. Thanks for the feedback and excellent explanation!
– user2449058