基本上,我正在寻找一个正则表达式来选择所有标点符号,除了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上成功执行此操作。
您可以匹配并捕获第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"
正则表达式是
(https?://\S*)|[[:punct:]]+
细节
(https?://\S*)
- \1
或https?://
https://
- 0+非空白字符http://
- 或\S*
- 1+标点符号(正确的标点符号,符号和|
)