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

xiaobai2 · May 21, 2018 · Last by zfjoy520 replied at May 22, 2018 · 1275 hits
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 Floor has deleted

你这个处理是去除 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"]
Reply to zfjoy520

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

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

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

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

Reply to zfjoy520

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

Reply to IChou

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

xiaobai2 closed this topic. 22 May 19:59
You need to Sign in before reply, if you don't have an account, please Sign up first.