2015-02-09 73 views
0

我有一個返回頁面標題的方法。標題可以返回包含Episodes信息的字符串,並且不包含情節信息。例如:「朋友可以聊天」和「第12集空心人」我需要對最終字符串使用正則表達式並將其返回。。ruby中有正則表達式的.try

title = row.at("h3") 
      .try(:children) 
      .try(:first) 
      .try(:text) 
      .try(:strip) 
      .try(:[], /(Episode \d+ [–-]\s*)(.*)/,2) 

這裏我得到空心人作爲標題,因爲它包含情節信息和正則表達式匹配在這裏。 但在第一種情況下,它返回零,因爲「朋​​友可以聊天」沒有情節信息,因此它將返回無匹配正則表達式。

那麼我該如何有效地返回它。我可以使用像

title = row.at("h3") 
      .try(:children) 
      .try(:first) 
      .try(:text) 
      .try(:strip) 

title = title.try(:[], /(Episode \d+ [–-]\s*)(.*)/,2) \ 
    if title && title.try(:[], /(Episode \d+ [–-]\s*)(.*)/,2) 

任何其他方式,我可以有效地返回它。

回答

0

你可以修改你的正則表達式,使「插曲」字符串不是強制性的:

# /(Episode \d+ [–-]\s*)(.*)/ 
/(Episode\s+\d+\s+[–-]?\s*)?(.*))/ 

這將同時匹配:

a = ["Friends Can chat", "Episode 12 Hollow man"] 
a.map { |t| 
    #     ⇓ No episode?—no worry! 
    /(Episode\s+\d+\s*)?(.*)/ =~ t 
    ($~[1] ? $~[1] : 'NO EPISODE ') + $~[2] 
} 
# [ 
# [0] "NO EPISODE Friends Can chat", 
# [1] "Episode 12 Hollow man" 
# ] 

希望它能幫助。