【问题标题】:Dealing with special character in Nokogiri / Regex处理 Nokogiri / Regex 中的特殊字符
【发布时间】:2017-05-10 10:26:03
【问题描述】:

我正在从 HTML 文档的正文中获取文本,如下所示。当我尝试对术语“Exhibit 99”进行正则表达式扫描时,我得到一个不匹配的,即一个空数组。但是,在 html 中,我确实看到了“Exhibit 99”,尽管检查元素用 &nbsp99 显示它。如何摆脱这些 HTML 字符并像搜索常规字符串一样搜索“Exhibit 99”?

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)

【问题讨论】:

    标签: ruby regex nokogiri


    【解决方案1】:

    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)
    

    这允许在exhibit99 之间使用除字母、数字或下划线以外的任何字符。它会匹配空格、nbsp、制表符、破折号……

    【讨论】:

    • 这行得通。你能解释一下这段代码在做什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2012-11-14
    • 2012-09-18
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多