处理Nokogiri/Regex中的特殊字符
问题描述:
我从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)
答
Unicode字符空间
您可以使用:
body.scan(/exhibit\p{Zs}99/i)
从documentation约Unicode character’s General Category
:
/\p{Z}/ - 'Separator'
/\p{Zs}/ - 'Separator: Space'
这一个空格或non-breaking space,但没有标签或匹配新队。该字符串应该用UTF-8编码。有关更多信息,请参阅此related question。
非文字字符
甲更宽容的正则表达式是:
body.scan(/exhibit\W99/i)
这允许比字母,数字或exhibit
和99
之间下划线其他任何字符。它会匹配一个空白,一个nbsp,一个标签,一个短划线,...
这是有效的。你能解释一下这段代码在做什么吗? – PiperWarrior