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"
正则表达式是
(https?://\S*)|[[:punct:]]+
参见regex demo。
详情
(https?://\S*)
- 第 1 组(从替换模式中引用 </code>):
<ul>
<li><code>https?://
- https://
或 http://
\S*
- 0+ 个非空白字符
|
- 或
[[:punct:]]+
- 1+ 标点符号(正确的标点符号、符号和 _
)
基本上,我正在寻找 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"
正则表达式是
(https?://\S*)|[[:punct:]]+
参见regex demo。
详情
(https?://\S*)
- 第 1 组(从替换模式中引用</code>): <ul> <li><code>https?://
-https://
或http://
\S*
- 0+ 个非空白字符
|
- 或[[:punct:]]+
- 1+ 标点符号(正确的标点符号、符号和 _
)