簡體   English   中英

.try在ruby中使用正則表達式

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM