r - 用一个正则表达式替换字符串中的模式
问题描述
我想替换字符串中的后缀。此后缀可以是.x
或.y
。如果它是.x
我想用string1
(比如说)替换它,如果.y
它应该被替换为string2
. (替换字符串是任意的,但后缀和替换字符串之间有明确的映射,例如.x -> .string1
and .y -> .string2
)。
我可以通过使用这样的2 个调用轻松实现这gsub
一点:
in_str <- c("a.x", "a.y")
gsub("\\.y$", ".string2", gsub("\\.x$", ".string1", in_str)))
# [1] "a.string1" "a.string2"
问题
有没有一个regex
我可以通过一个 电话来实现这一点gsub
?或者是否有任何库函数可以让我一次性替换后缀?
解决方案
我认为这不是正则表达式的用途,我会以不同的方式做:
in_str <- c("a.x", "a.y", "b.y", "b.x")
strmap <- c(.x="string1", .y="string2")
strmap[ gsub(".*(\\.[xy])$", "\\1", in_str) ]
结果:
.x .y .y .x
"string1" "string2" "string2" "string1"
这样做的好处是更灵活,更清晰地将后缀映射的定义与执行映射的实际函数分开。您甚至可以进一步自动化它:
in_str <- c("a.x", "a.y", "b.y", "b.x")
strmap <- c(x="string1", y="string2")
suffixes <- paste0(names(strmap), collapse="")
pattern <- sprintf(".*\\.([%s])$", suffixes)
res <- strmap[ gsub(pattern, "\\1", in_str) ]
names(res) <- in_str
结果
a.x a.y b.y b.x
"string1" "string2" "string2" "string1"
推荐阅读
- c# - 使用 closedxml 和字符代码将符号插入单元格
- node.js - LIKE 语句中查询参数导致响应慢
- hyperledger-fabric - 私有数据可以在 Hyperledger Fabric 中公开吗
- ios - 带有 UIView 转换的幻灯片动画?
- google-cloud-platform - Filebeat 负载平衡不起作用
- spring-boot - Spring Boot 集成测试 Jersey JAX-RS 资源
- html - 将段落与 FontAwesome 图标对齐
- c - 从LabVIEW数组中获取内存地址
- php - 如何覆盖两个相同的特征方法?
- python - 我如何部署电报机器人?