怎样删除部分字符串?

2016-06-27 19:36:05 +08:00
 omg21
<p class="p"><b><span style="font-family: 'Times New Roman'; font-size: 12pt;">一、岗位及人数</span></b><span style="font-family: 'Times New Roman'; font-size: 12pt;"><o:p></o:p></span></p><p class="p"><span style="font-family: 'Times New Roman'; font-size: 12pt;">办公室工作人员,<font face="Times New Roman">1</font><font face="微软雅黑">名;教师,</font><font face="Times New Roman">4</font><font face="微软雅黑">名。</font></span>

文本是类似这样的,我想删除 tag 里面的 class 、 style ,保留<p><span><div>并且删除掉<font>应该怎么做?
是用 BS4 还是用字符串操作?
3192 次点击
所在节点    Python
35 条回复
15954237961
2016-06-27 19:44:09 +08:00
用 replace 试试
lslqtz
2016-06-27 19:45:29 +08:00
正则匹配试试。
omg21
2016-06-27 20:04:03 +08:00
@15954237961 用 replace 有局限性,这段代码是 class=p ,下段代码有可能就是 class=y 。
omg21
2016-06-27 20:04:37 +08:00
@lslqtz 用正则容易伤及无辜
seki
2016-06-27 20:10:38 +08:00
<font>在这里相当于 <span> 的子元素,所以把文本提出来 append 到 <span> 的文本里面?用 lxml 或者 bs4 ?
lslqtz
2016-06-27 20:15:47 +08:00
@omg21 不用代码有局限性。
lslqtz
2016-06-27 20:15:53 +08:00
正则 打错。
lslqtz
2016-06-27 20:20:19 +08:00
class="(.*?)"
已提取出来。
http://233.dog/f_22821044.png
napsterwu
2016-06-27 20:21:56 +08:00
js 里面我是这样的
string.replace(/\s?(class|style)="[^"]+?"/g, '')
这样可以选择性的删 不过缺点是没有办法清掉 class=""这样的。
omg21
2016-06-27 20:24:14 +08:00
@seki 我考虑了一下,提<font>的子元素再放到<span>里不好操作啊,搞不清顺序。
omg21
2016-06-27 20:29:36 +08:00
@lslqtz 嗯,就用这个了
omg21
2016-06-27 20:31:23 +08:00
@napsterwu 那就在最后单独加个删 class=""的就行了,谢了
seki
2016-06-27 20:31:30 +08:00
ChiChou
2016-06-27 20:35:47 +08:00
你可以构建一个 DOM 树然后取 textContent 。。那么 @seki 的方案即可
Septembers
2016-06-27 20:40:49 +08:00
Septembers
2016-06-27 20:43:33 +08:00
抱歉没看节点请无视
yxzblue
2016-06-27 20:57:09 +08:00
```javascript
var s = '<p class="p"><b><span style="font-family: \'Times New Roman\'; font-size: 12pt;">一、岗位及人数</span></b><span style="font-family: \'Times New Roman\'; font-size: 12pt;"><o:p></o:p></span></p><p class="p"><span style="font-family: \'Times New Roman\'; font-size: 12pt;">办公室工作人员,<font face="Times New Roman">1</font><font face="微软雅黑">名;教师,</font><font face="Times New Roman">4</font><font face="微软雅黑">名。</font></span>';
s = s.replace(/(?:\s+(?:class|style)=".+?"|\<font.+?\<\/font\>)/g, '');
console.log(s);
```
yxzblue
2016-06-27 21:00:26 +08:00
lslqtz
2016-06-27 21:03:11 +08:00
人家的方案都挺优雅的。
quxw
2016-06-27 21:21:08 +08:00
一个一个字符遍历,
'<' '>'之间,不以 'p', '/p' 'span' '/span'开头 的删掉。空格什么再调整下修好了。
当然前提是你的 html 够规范

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/288671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX