Ruby正则表达式中提取信息的优雅方法

Ruby正则表达式中提取信息的优雅方法,ruby,regex,Ruby,Regex,我的问题很简单,这是一句话: <title><* page.title *></title> 我想得到“页面标题”部分。我可以通过以下方法实现: replacement = line.match(/\<\* .* \*\>/) replacement_contain = replacement.to_s.match(/ .* /).to_s.strip replacement=line.match(/\/) repla

我的问题很简单,这是一句话:

   <title><* page.title *></title>  

我想得到“页面标题”部分。我可以通过以下方法实现:

replacement = line.match(/\<\* .* \*\>/)  
replacement_contain = replacement.to_s.match(/ .* /).to_s.strip    
replacement=line.match(/\/)
replacement_contain=replacement.to_.match(/.*/).to_.strip
有什么捷径或更好的方法可以做到这一点吗?

“[/(?“page.title”
"   <title><* page.title *></title>  "[/(?<=\*).*(?=\*)/].strip #=> "page.title"
“”[/(?“页面.标题”

一种方法是使用捕获组:

str = "<title><* page.title *></title>"

str[/\*\s+(.*)\s+\*/,1]
  #=> "page.title"

\1
是由提取并返回的捕获组#1的内容。

一种方法是使用捕获组:

str = "<title><* page.title *></title>"

str[/\*\s+(.*)\s+\*/,1]
  #=> "page.title"
\1
是由提取并返回的捕获组#1的内容

“如何用正则表达式解析HTML”的答案是

例如,@sawa和@Cary的解决方案,如果您知道HTML将包含什么内容,那么是可以的,但是如果您的页面中有
*>
任何其他地方,则会失败,这是完全有效的HTML。请改用像Nokogiri这样的HTML解析器(如上所示)

“如何用正则表达式解析HTML”的答案是


例如,@sawa和@Cary的解决方案,如果您知道HTML将包含什么内容,那么是可以的,但是如果您的页面中有
*>
任何其他地方,则会失败,这是完全有效的HTML。请改用像Nokogiri这样的HTML解析器(如上所示).

如果你不熟悉诺科吉里,你应该花点时间来学习它。我听说这很简单。@Cary,谢谢你给我留下了诺科吉里的印象,我不知道我为什么不使用它。如果你不熟悉诺科吉里,你应该花点时间来学习它。我听说这很简单。@Cary,谢谢我不知道我为什么不使用它。
require 'nokogiri'
require 'open-uri'

html = Nokogiri.HTML open('https://stackoverflow.com/questions/27879967/elegant-way-to-extarct-information-ruby-regex')

puts html.css('title').text
# => "Elegant way to extarct information ruby regex - Stack Overflow"