新手问题 这个正则该怎么写?

xiaobai2 · 2018年05月21日 · 最后由 zfjoy520 回复于 2018年05月22日 · 1275 次阅读
str = "<div class="aaa-bbb_ccc-ddd"><li>text_1</li></div><div class="eee -fff_ggg"><p>test_2</p></div><div class="aaa_bbb -ccc-ddd">test_3</div>"

str 是我得到一个字符串,里面有很多用 div 标签包含着的内容 现在要取 div 里面的内容(内容可能有 html 标签不过不影响取),部分 code 如下

Nokogiri::HTML(str).css('.'+key).inner_html

而这个 key 就是我取上面 div 标签里面 class 的值,但是这个 class 值有时候会出现aaa-bbb_ccc - ddd空格。 因为出现空格的情况是没有规律的,所以我想通过正则把 div 里面 class 的值包含的空格给去掉,这个正则该怎么写?
求解!

https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Searchable#css-instance_method

#css 就是一个元素选择器,class 的空格本来就是有意义的

Nokogiri::HTML(str).css('.eee.-fff_ggg').inner_html

如果是因为换行等其他原因意外引入的空格,且你确保那儿只有一个 class 的时候,可以先对 str 进行一点处理

str.gsub(/class=\".+?\"/) { |m| m.sub(' ', '') }
2 楼 已删除

你这个处理是去除 str 里面 class 的空格吗?好像是不太对啊@IChou

str = "<div class='work_ title'><span>可以解析了</span></div>"
str.gsub(/class=\".+?\"/) { |m| m.sub(' ', '') }
结果 -> "<div class='work_ title'><span>可以解析了</span></div>"

如果不要 div 里面的 li, p, div 等标签,只取内容的话可以试试这个。

Nokogiri::HTML(str).xpath('//*[text()]').map(&:text) #  => ["text_1", "test_2", "test_3"]
zfjoy520 回复

内容里面可能包含一些标签换行符之类的,不过现在已经实现了

str.gsub(/class='(.+?)'/) { |m| m.sub(' ', '') }
xiaobai2 回复

当然不对了,单引号和双引号能一样么

建议还是花点时间熟悉一下正则吧,以后要用的地方太多了

zfjoy520 回复

朱老师 你居然来逛社区了,工作量不饱和啊

IChou 回复

嗯,偶尔来看看。你工作量也不大嘛,看你经常回帖。

xiaobai2 关闭了讨论。 05月22日 19:59
需要 登录 后方可回复, 如果你还没有账号请 注册新账号