使用gsub R删除所有特定的html标记

时间:2015-11-28 11:01:46

标签: regex r gsub

我有一个像

这样的字符串
txt<-"text text text <div><div><script>xxxx</script></div><scrip>yyyyy</script>text </div><script>zzzzzz</script>"

我想删除所有脚本标记及其内容。

"text text text <div><div></div>text </div>"

我试过了

gsub("<script.*?>(.*)<\\/script>", "", txt)

你能给我们一个很好的教程来学习R

的快速正则表达式

提前致谢

2 个答案:

答案 0 :(得分:2)

贪婪点匹配的第一次尝试注定要失败,因为贪婪的匹配并不能确保最短的匹配(好吧,懒惰的匹配也不会),而这只会匹配中间所有必要的文本。

使用<script>[^</script>^<script>]+</script>的最新尝试也无效,因为[^</script>^<script>]+匹配</s,{{以外的1个或多个字母1}},cript>。显然,这不是你需要的。

从问题本身提取,可以处理任何纯文本文件,正则表达式从文本中删除大块

当我们需要匹配某些不相同的标记(或分隔符)之间的子字符串时,我们可以使用 unroll-the-loop技术支持 lookaheads 的类似Perl的正则表达式

以下是适用于任何大小的纯文本的工作代码:

^

regex demo can be seen here,此处为IDEONE demo

基本上,匹配:

  • txt<-"text text text <div><div><script>xxxx</script></div><script>yyyyy</script>text </div><script>zzzzzz</script>" gsub("<script\\b[^<]*>[^<]*(?:<(?!/script>)[^<]*)*</script>", "", txt, perl=T) ## [1] "text text text <div><div></div>text </div>" - 任何开放<script\\b[^<]*>标记即使内部属性(不是<script>)也不会出现在HTML属性中,因此<比{{1}更安全}}或[^<]*
  • [^<>]* - 展开的[^>]*构造,匹配任何文字,[^<]*(?:<(?!/script>)[^<]*)*
  • (?s).*? - 关闭</script>代码

答案 1 :(得分:0)

我想我找到了它

gsub("<script>[^</script>^<script>]+</script>", "", txt)