Ruby - 正则表达式

时间:2011-11-02 05:15:30

标签: ruby regex

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()函数中执行的操作。我对正则表达式不太熟悉

3 个答案:

答案 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)"