R 正则表达式 : modifying digits of varying lengths at end of string

标签 r regex

我正在尝试使用正则表达式将小数添加到字符串向量中美元符号后面的任何数字。到目前为止,我已经取得了部分成功,但在处理出现在字符串末尾的实例时遇到了麻烦。这是问题的示例:

ex <- tibble(strings = c("10/$20/$30", "$40/50/60", "$70.00/80/$90.00"))

gsub("(\\$[0-9]+)([^\\.])", "\\1\\.00\\2", ex$strings)

我认为这意味着,识别以美元符号和至少一位数字开头但后面没有句点的子字符串,并将它们替换为美元符号和当前数字,然后是小数点和两位零...但是产生:

[1] "10/$20.00/$3.000"       "$40.00/50/60"           "$7.000.00/80/$9.000.00" 

我看到它为所有不位于字符串末尾的美元值返回了所需的结果,但正如第一个和第三个字符串所证明的那样,很明显我仍然缺少一种成分。

似乎我有两个问题,第一个是匹配字符串末尾的字符串 ($30),另一个是已经有小数的美元值。

最佳答案

以下逻辑似乎可行:

x <- c("10/$20/$30", "$40/50/60", "$70.00/80/$90.00")
gsub("(\\$\\d+)(?![^/])", "\\1.00", x, perl=TRUE)

[1] "10/$20.00/$30.00" "$40.00/50/60"     "$70.00/80/$90.00"

这里是正则表达式模式的解释:

(\\$\\d+)  match and capture '$' followed by one or more digits
(?![^/])   which is also followed by either '/' or the end of the input

然后我们替换为捕获的数量,后跟 .00。请注意,负先行 (?![^/]) 排除了已经具有小数部分的输入。

关于R 正则表达式 : modifying digits of varying lengths at end of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63963919/

相关文章:

r - 使用 Cowplot align 保持绘图间距不变

php - 使用 php 和 regex 获取标签和数据并存储为关联数组

javascript - 在正则表达式方法中使用变量,无法使其工作

r - 需要 PVF 包的示例数据(光伏和太阳预报)

mysql - 在 dbGetQuery 中为 () 查询中的 sql 准备字符串

java - Java 7 中的 Regex-replace-with-function-evaluation 等效于什么?

ios - 捕获组正则表达式 NSRegularExpression iOS

regex - 如何在Groovy的命令行参数中使用星号(*)?

r - R 中的 length() 用于确定数据帧中的观察数

r - 用 R 中的 colSums 划分列