2016-12-25 3 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) 

С 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, вкладке, тире, ...

+0

Это работает. Не могли бы вы объяснить, что делает этот кусок кода? – PiperWarrior

Смежные вопросы