[英].try with regular expression in ruby
我有一個返回頁面標題的方法。 標題可以返回包含劇集信息但不包含劇集信息的字符串。 例如:“朋友可以聊天”和“第12集空心人”,我需要在最后一個字符串上使用正則表達式並將其返回。
title = row.at("h3")
.try(:children)
.try(:first)
.try(:text)
.try(:strip)
.try(:[], /(Episode \d+ [–-]\s*)(.*)/,2)
在這里,我得到了空心男人作為標題,因為它包含情節信息,並且此處的正則表達式匹配。 但是在第一種情況下,它返回nil,因為“朋友可以聊天”沒有情節信息,因此在與正則表達式匹配時返回nil。
因此,我該如何有效地將其退回。 我可以像
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)
我可以通過其他任何方式有效地返回它。
您可以修改正則表達式以使“ Episode”字符串不是必需的:
# /(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"
# ]
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.