删除 r 中逗号后的前 4 个字符
Delete first 4 characters after a comma in r
我有一个包含以下行的向量:
/en/house/125,/en/house/145,/en/house/06
/en/house/45,/fr/house/22,/fr/house/34
我想删除 /en/、/fr/ 等,因为有 24 种 2 字母的可能性。换句话说,我想删除一行的前 4 个字符,以及每次行中有逗号的前 4 个字符(我保留逗号)。
第一个很简单,我刚用过:
apply(vectorA, 2, function(x)gsub('\s+','',x))
但对于逗号后面的那个,它似乎不太明显。
请问有人知道如何轻松实现该功能吗?
预期输出应该是:
house/125,house/145,house/06
house/45,house/22,house/34
stringr::str_replace_all
怎么样?
"/en/house/125,/en/house/145,/en/house/06" -> string
stringr::str_replace_all(string, "/[a-z]{2}/", "")
这会产生:
[1] "house/125,house/145,house/06"
这假设两个正斜杠之间的所有标签都是两个字符长且小写。
实际上,您只需要替换字符串开头或逗号后的 /[a-z]{2}/
。
您需要以下正则表达式:
(^|,)/[a-z]{2}/
并替换为 </code> 反向引用,如果捕获组匹配它,它将放回逗号。见 <a href="https://regex101.com/r/sScAb0/1" rel="nofollow noreferrer">regex demo</a>.</p>
<p><strong>详情</strong></p>
<ul>
<li><code>(^|,)
- 第 1 组(稍后用替换模式中的 </code> 替换反向引用引用):字符串的开头 (<code>^
) 或 (|
)一个逗号
/
- 斜杠
[a-z]{2}
- 两个小写 ASCII 字母
/
- 斜线。
x <- c("/en/house/125,/en/house/145,/en/house/06", "/en/house/45,/fr/house/22,/fr/house/34", "/es/do/45,/ro/nu/22,/ja/hs/34")
gsub("(^|,)/[a-z]{2}/", "\1", x)
## => [1] "house/125,house/145,house/06"
## [2] "house/45,house/22,house/34"
## [3] "do/45,nu/22,hs/34"
我有一个包含以下行的向量:
/en/house/125,/en/house/145,/en/house/06
/en/house/45,/fr/house/22,/fr/house/34
我想删除 /en/、/fr/ 等,因为有 24 种 2 字母的可能性。换句话说,我想删除一行的前 4 个字符,以及每次行中有逗号的前 4 个字符(我保留逗号)。 第一个很简单,我刚用过:
apply(vectorA, 2, function(x)gsub('\s+','',x))
但对于逗号后面的那个,它似乎不太明显。 请问有人知道如何轻松实现该功能吗?
预期输出应该是:
house/125,house/145,house/06
house/45,house/22,house/34
stringr::str_replace_all
怎么样?
"/en/house/125,/en/house/145,/en/house/06" -> string
stringr::str_replace_all(string, "/[a-z]{2}/", "")
这会产生:
[1] "house/125,house/145,house/06"
这假设两个正斜杠之间的所有标签都是两个字符长且小写。
实际上,您只需要替换字符串开头或逗号后的 /[a-z]{2}/
。
您需要以下正则表达式:
(^|,)/[a-z]{2}/
并替换为 </code> 反向引用,如果捕获组匹配它,它将放回逗号。见 <a href="https://regex101.com/r/sScAb0/1" rel="nofollow noreferrer">regex demo</a>.</p>
<p><strong>详情</strong></p>
<ul>
<li><code>(^|,)
- 第 1 组(稍后用替换模式中的 </code> 替换反向引用引用):字符串的开头 (<code>^
) 或 (|
)一个逗号
/
- 斜杠[a-z]{2}
- 两个小写 ASCII 字母/
- 斜线。x <- c("/en/house/125,/en/house/145,/en/house/06", "/en/house/45,/fr/house/22,/fr/house/34", "/es/do/45,/ro/nu/22,/ja/hs/34")
gsub("(^|,)/[a-z]{2}/", "\1", x)
## => [1] "house/125,house/145,house/06"
## [2] "house/45,house/22,house/34"
## [3] "do/45,nu/22,hs/34"