str1 = "M Rahim (C)(W): 61(97)S A Hasan: 51(68)"
str2 = "R Taylor (C): 76(160)B Watling: 16(26)"
puts format(str1) #=> "M Rahim (C)(W): 61(97)\nS A Hasan: 51(68)"
puts format(str2) #=> "R Taylor (C): 76(160)\nB Watling: 16(26)"
获取这些输出我需要在format()
函数中执行的操作。我对正则表达式不太熟悉
答案 0 :(得分:2)
这可能会起到作用,但很难用这样有限的样本知道:
def format(s)
s.sub(/\A(.*?:\s*\d+\(\d+\))/) { $1 + "\n" }
end
寻找的主要内容是': 61(97)'
和': 76(160)'
,或者通常是冒号后跟零个或多个空格字符,后跟一个数字,后跟括号内的数字。
如果您不知道每行有多少条目,那么您可以使用scan
提取它们,并join
将它们重新组合在一起:
def format(s)
s.scan(/.*?:\s*\d+\(\d+\)/).join("\n")
end
例如:
>> s = str1 + str2
=> "M Rahim (C)(W): 61(97)S A Hasan: 51(68)R Taylor (C): 76(160)B Watling: 16(26)"
>> s.scan(/.*?:\s*\d+\(\d+\)/).join("\n")
=> "M Rahim (C)(W): 61(97)\nS A Hasan: 51(68)\nR Taylor (C): 76(160)\nB Watling: 16(26)"
答案 1 :(得分:2)
这里有一个方法可以找到任何)
后面跟一个大写字母,并在)
之后插入换行符:
def format(s)
s.gsub(/\)(?=[A-Z])/, ")\n")
end
/
启动正则表达式。
\)
匹配字符串中的任何右括号。斜杠是必需的,因为)
在正则表达式中具有特殊含义,因此需要对其进行转义。
(?=[A-Z])
是一个肯定的lookahead断言,断言括号后跟一个大写字母。
第二个/
结束正则表达式。
答案 2 :(得分:1)
def format(string)
string.sub(/(\d\))/, '\1' + "\n")
end
p format("M Rahim (C)(W): 61(97)S A Hasan: 51(68)") #=> "M Rahim (C)(W): 61(97)\nS A Hasan: 51(68)"
p format("R Taylor (C): 76(160)B Watling: 16(26)") #=> "R Taylor (C): 76(160)\nB Watling: 16(26)"