r - 修改正则表达式匹配的子串并放回
问题描述
我有一个任意字符串,比如“1a2 2a1 3a2 10a5”,我想做一个任意的数学运算,比如将某些数字加倍,然后说任何后跟“a”的数字。
我可以相对轻松地提取我想要的数字
string = "1a2 2a1 3a2 10a5"
numbers = stringr::str_extract_all(string,'[0-9]+(?=a)')[[1]]
显然,将它们加倍是微不足道的
numbers = 2*(as.integer(numbers))
但是我在将新结果放在旧位置时遇到问题。获得输出“2a2 4a1 6a2 20a5”。我觉得应该有一个函数可以完成此任务,但我能想到的只是使用记录匹配的原始索引gregexpr
并将新结果手动放置在坐标中。
解决方案
我们可以使用str_replace_all
fromstringr
来捕获数字"a"
,然后在它们的回调函数中将它们乘以 2。
stringr::str_replace_all(string, "\\d+(?=a)", function(m) as.integer(m) * 2)
#[1] "2a2 4a1 6a2 20a5"
推荐阅读
- excel - 带变量的 Vlookup
- outlook - span 上的border-bottom 属性会影响outlook365 中各个元素的所有边框
- python - Pyinstaller 在创建 exe 时无法找到项目依赖项的 dll
- android - 如果前一个和当前的 apk 是由 2 台不同的机器创建的,是否可以更新调试 apk
- ios - 视图控制器采用 MXSegmentedPagerControllerDataSource 但未调用 viewControllerForPageAt 必须使用函数 viewForPageAt
- python - python函数返回的对象的对象ID
- memory-management - 如何在redis服务器中阻止所有写入并只允许读取?
- ios - 修改太多字节的 Data 对象会使 swift 应用程序崩溃
- ios - TimeZone:获取缩写而不是 GMT 偏移量
- vagrant - Vagrant LXC 盒子可以下载吗?