我遇到了一个看似简单的问题,但我找到的解决方案并不令人满意。我想用逗号替换后面的数字。例如,替换数字后的句点
strings <- c("22.222.222", "12.323", "don.t replace")
将被成功地转化为
[1] "22,222,222" "12,323" "don.t replace"
我尝试的第一个解决方案是
str_replace_all(strings,
"(?<=\\d+)\\.",
",")
,但我得到了以下错误消息:
Error in stri_replace_all_regex(string, pattern, replacement, vectorize_all = vec, :
Look-Behind pattern matches must have a bounded maximum length. (U_REGEX_LOOK_BEHIND_LIMIT)
当我使用
str_replace_all(strings,
"(?<=\\d{1,3})\\.",
",")
我得到正确的转换。然而,硬编码的1-3位不是我想要的,我不明白为什么\\d+
不起作用,但\\d{1,3}
。
不是'“(?<= \\ d)\\。”'够好吗? – sgibb
为什么你需要向前看?我的意思是你接受了一个前瞻解决方案的答案,而这实际上不是你在这里需要的。在性能方面,后视是昂贵的(至少在模式开始时),你应该尽可能地避免它们。请注意,限制已经使用的子字符串的lookbehinds是有效的,但事实并非如此。 –