基本上,我正在寻找一个正则表达式来选择除了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上成功执行此操作。
答案 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个标点符号(正确的标点,符号和_
)