【问题标题】:How to delete everything that contains ".com" in the string but has a link?如何删除字符串中包含“.com”但有链接的所有内容?
【发布时间】:2020-10-21 17:48:42
【问题描述】:

我怎样才能在文本中得到我期望的输出,如下例所示?

x<-c("Commerce recommend erkanexample.com.tr. This site erkanexample.com. erkandeneme.com is widely. The company name is apple.commerce is coma. spread")
x<-gsub("(.com)\\S+", "",x)
x
[1] "Commerce r erkanexample This site erkanexample erkandeneme.com is widely. The name is apple is"
expected
[1] "Commerce recommend This site. is widely. The company name is apple.commerce is coma. spread"
> 

【问题讨论】:

  • 试试x&lt;-gsub("\\s*\\S+\\.com\\b(?:\\.\\S+)?", "", x)
  • 如果上述方法不起作用,请尝试gsub("\\s*\\S+\\.com(?:\\.\\w+)*\\b", "", x)
  • 任何解决方案都有效吗?
  • 非常感谢@Wiktor Stribiżew 和大家。两者似乎都有效。我希望您给我一些时间来全面检查我拥有的数据库。
  • 代码是有效的。谢谢。

标签: r string gsub


【解决方案1】:

stringr 包提供了基本字符串操作的功能:

library(stringr)
library(dplyr)

x %>% 
  str_split(" ") %>% 
  unlist() %>% 
  str_subset("\\.com($|\\.)",negate = TRUE) %>% 
  str_c(collapse = " ")

给予:

"Commerce recommend This site is widely. The company name is apple.commerce is coma. spread" 

编辑后

x %>% 
  str_split(" ") %>% 
  unlist() %>%
  str_subset("\\.com$", negate = TRUE) %>% 
  str_replace(".*\\.com.*\\.$", ".") %>%
  str_c(collapse = " ") %>%
  str_replace_all(" \\.", "\\.")

给予:

"Commerce recommend. This site. is widely. The company name is apple.commerce is coma. spread"

【讨论】:

  • 谢谢@det 我在手动编写预期输出时纠正了一个错误。 “……这个网站。”我忘了这里的点号。我想。我会提供信息。
  • 我已经添加了编辑,但我不确定它是否是你想要的。
  • 我预期的输出是正确的。用 Gsub 做起来更简单,我有很多解决方案。我检查我的数据库。它在你的答案中起作用。我很惊讶该选择哪一个。谢谢@det。
  • @Erkan 是的,当然没问题,很乐意提供帮助。我不太擅长正则表达式。
【解决方案2】:

IDEA:按空格分割并检测哪个单词包含 .com 并选择哪个不包含该单词并加入它们

x<-c("Commerce recommend erkanexample.com.tr. This site erkanexample.com. erkandeneme.com is widely. The company name is apple.commerce is coma. spread")
split_str <- str_split(x," ",simplify =FALSE)[[1]]
paste(split_str[!grepl("[.]com", split_str)],collapse = " ")

给予

“商务推荐这个网站广泛。公司名称是昏迷。传播”

【讨论】:

  • 更新了答案,因为正则表达式需要检测 .com'[.]com'
  • 谢谢@vishal。用 gsub 编写的解决方案对我来说似乎更简单。他们似乎在工作。我希望您给我一些时间来全面检查我拥有的数据库。
【解决方案3】:

这是你想要的吗?

gsub("\\s[a-z]+\\.com(\\.[a-z]+)?\\b", "", x)
[1] "Commerce recommend. This site. is widely. The company name is apple.commerce is coma. spread"

这里,我们什么都不替换:

  • \\s:一个空格字符
  • [a-z]+:一个或多个小写字母
  • \\.:一节
  • com:字符串com
  • (\\.[a-z]+)?:一个可选的句点,后跟一个或多个可选的小写字母
  • \\b: 一个词的边界

【讨论】:

  • 谢谢@Chris Ruehlemann。你的回答似乎奏效了。我希望您给我一些时间来全面检查我拥有的数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2023-01-10
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2017-06-03
相关资源
最近更新 更多