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

R - Regular expression to match all punctuation except that inside of a URL

基本上,我正在寻找 select 所有标点符号的正则表达式,除了 URL.

中的标点符号

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

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

并删除所有匹配项,它应该变成:

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

gsub("[[:punct:]]", "", x) 删除所有标点符号,包括来自 URL 的标点符号。我试过对 https 后使用的 select 标点符号使用负面观察,但没有成功。

在我需要的情况下,所有 URL 都是 Twitter link 风格的 URL https://t.co/。它们不以 .com 结尾。他们也没有一个以上的反斜杠 slug (/ThisIsAURL)。但是,理想情况下,我希望正则表达式尽可能通用,能够在任何 URL.

上成功执行此操作

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

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 组(从替换模式中引用 </code>): <ul> <li><code>https?:// - https://http://
  • \S* - 0+ 个非空白字符
  • | - 或
  • [[:punct:]]+ - 1+ 标点符号(正确的标点符号、符号和 _