簡體   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