我正在尝试编写一个从一段文本中删除网站的功能。我有:
removeWebsites<- function(text){
text = gsub("(http://|https://|www.)[[:alnum:]~!#$%&+-=?,:/;._]*",'',text)
return(text)
}
这处理了一大堆问题,但不是一个受欢迎的问题,即xyz.com
我不希望在上述正则表达式的末尾添加.com
,因为它限制了该正则表达式的范围。但是我尝试写一些更多的正则表达式:
gsub("[[:alnum:]~!#$%&+-=?,:/;._]*.com",'',testset[10])
这很有用,但它也修改了abc@xyz.com
格式的电子邮件ID到abc@
。我不想要这个,所以我把它修改为
gsub("*((^@)[[:alnum:]~!#$%&+-=?,:/;._]*).com",'\\1',testset[10])
仅留下电子邮件ID,但停止识别xyz.com
我明白我需要某种形式上的区别,这是我所解释的形式here,但我无法实现它(主要是因为我无法完全理解它)。关于如何解决我的问题的任何想法?
编辑:我尝试过负面的前瞻:
gsub("[[:alnum:]~!#$%&+-=?,:/;._](?!@)[^(?!.*@)]*.com",'',testset[10])
我收到了“无效的正则表达式”错误。我相信在纠正方面有一些帮助可以使这个工作......
答案 0 :(得分:1)
我无法相信。实际上有一个简单的解决方案。
gsub(" ([[:alnum:]~!#$%&+-=?,:/;._]+)((.com)|(.net)|(.org)|(.info))",' ',text)
这适用于:
请注意打破它!我相信会有一些案例也会破坏这一点。
答案 1 :(得分:0)
你的外表看起来对我来说有点滑稽:你不能在一个角色课里面看,你为什么要向前看?看起来更合适了。 我认为以下表达式应该工作,虽然我没有测试它:
gsub("*((?<!@)[[:alnum:]~!#$%&+-=?,:/;._]*).com",'\\1',testset[10])
还要注意,lookbehinds必须有固定长度,因此不允许使用乘数