繁体   English   中英

Ruby-正则表达式

[英]Ruby - regular expression

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

这也许可以解决问题,但很难通过如此有限的示例来了解:

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

好吧,这里是一个找到)后跟大写字母并在)之后插入换行符的方法:

def format(s)
    s.gsub(/\)(?=[A-Z])/, ")\n")
end

/开始正则表达式。

\\)匹配字符串中的任何右括号。 需要使用斜杠,因为)在正则表达式中具有特殊含义,因此需要转义。

(?=[AZ])是一个正向超前断言,断言括号后跟一个大写字母。

第二个/结束正则表达式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM