我有一个像
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的快速正则表达式
提前致谢
您第一次尝试贪婪点匹配注定要失败,因为贪婪匹配不能确保最短匹配(当然,懒惰也不能保证最短匹配),而这只会匹配中间所有必要的文本。
在采用了最新的尝试<script>[^</script>^<script>]+</script>
也并不有效,[^</script>^<script>]+
比其他1个或多个字母匹配<
,/
,s
,c
,r
,i
,p
,t
,>
,^
。显然,这不是您所需要的。
从问题本身抽象出来,可以使用正则表达式从文本中删除大块来处理任何纯文本文件。
当我们需要在一些不相同的标记(或定界符)之间匹配子字符串时,我们可以使用展开循环技术和支持先行的类似Perl的正则表达式。
以下是适用于任何大小的纯文本的工作代码:
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属性中的标记,因此[^<]*
比[^<>]*
或使用更安全[^>]*
)[^<]*(?:<(?!/script>)[^<]*)*
-(?s).*?
与任何文字匹配的展开结构,但</script>
</script>
-结束</script>
标签本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句