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

问题描述 投票:1回答:1

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

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

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

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

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

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

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

r regex text-mining
1个回答
5
投票

您可以匹配并捕获第1组类似于URL的模式(如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

细节

  • qazxsw poi - 第1组(参考替换模式中的qazxsw poi): (https?://\S*) - \1https?:// https:// - 0+非空白字符
  • http:// - 或
  • \S* - 1+标点符号(正确的标点符号,符号和|
© www.soinside.com 2019 - 2024. All rights reserved.