2016-12-25 104 views
2

我从HTML文档正文获取文本,如下所示。当我尝试正则表达式扫描术语“图表99”时,我得到一个不匹配的数组,即空数组。但是,在html中,我确实看到“图表99”,尽管检查元素显示它与& nbsp99。我怎样才能摆脱这些HTML字符并像“常规字符串”一样搜索“图表99”?处理Nokogiri/Regex中的特殊字符

url = "https://www.sec.gov/Archives/edgar/data/1467373/000146737316000912/fy16q3plc8-kbody.htm" 
doc = Nokogiri::HTML(open(url)) 
body = doc.css("body").text 
body.scan(/exhibit 99/i) 

回答

2

Unicode字符空间

您可以使用:

body.scan(/exhibit\p{Zs}99/i) 

documentationUnicode character’s General Category

/\p{Z}/ - 'Separator' 
/\p{Zs}/ - 'Separator: Space' 

这一个空格或non-breaking space,但没有标签或匹配新队。该字符串应该用UTF-8编码。有关更多信息,请参阅此related question

非文字字符

甲更宽容的正则表达式是:

body.scan(/exhibit\W99/i) 

这允许比字母,数字或exhibit99之间下划线其他任何字符。它会匹配一个空白,一个nbsp,一个标签,一个短划线,...

+0

这是有效的。你能解释一下这段代码在做什么吗? – PiperWarrior