R - 正则表达式以匹配除URL内部之外的所有标点符号

时间:2017-12-21 22:11:35

标签: r regex text-mining

基本上,我正在寻找一个正则表达式来选择除了URL内的所有标点符号。

本质上,如果我有字符串:

This is a URL: https://test.com/ThisIsAURL !

删除它应该成为的所有匹配项:

This is a URL https://test.com/ThisIsAURL

gsub("[[:punct:]]", "", x)会删除包含网址在内的所有标点符号。我尝试使用负面外观来选择https后使用的标点符号,但这不成功。

在我需要的情况下,所有网址都是Twitter链接式网址https://t.co/。它们不会以.com结尾。他们也没有一个以上的背斜slu(/ThisIsAURL)。但是,理想的是,我希望正则表达式尽可能多样化,能够在任何URL上成功执行此操作。

1 个答案:

答案 0 :(得分:5)

您可以在第1组中匹配并捕获类似于网址的模式,如https?://\S*,然后匹配任何标点符号并替换为第1组的反向引用,以便在结果字符串中恢复网址:

x <- "This is a URL: https://test.com/ThisIsAURL !"
trimws(gsub("(https?://\\S*)|[[:punct:]]+", "\\1", x, ignore.case=TRUE))
## => [1] "This is a URL https://test.com/ThisIsAURL"

请参阅R demo online

正则表达式是

(https?://\S*)|[[:punct:]]+

请参阅regex demo

<强>详情

  • (https?://\S*) - 第1组(从替换模式引用\1):
    • https?:// - https://http://
    • \S* - 0+非空白字符
  • | - 或
  • [[:punct:]]+ - 1个标点符号(正确的标点,符号和_