R语言如何替换所有段落中特定词后至段落结束的全部内容
问题解决方法
问题原因
原正则^Talk:.*\r仅匹配到\r回车符位置就停止,\r之后的内容未被纳入匹配范围,因此不会被替换,出现fjeaofiz残留。
修正代码
直接用stri_replace_all_regex实现一步替换即可,不需要先定位再赋值,逻辑更简洁:
library(stringi) # 原始测试数据 x <- c("12 3456 789", "Talk: zpfozefpozjgzigzehgoi oezjgzogzjgoezjgo \r fjeaofiz ", "", NA, "Talk: 667") # 替换逻辑:匹配以Talk:开头的整段内容替换为*** x <- stri_replace_all_regex(x, "^Talk:.*", "***", dotall = TRUE) # 输出结果 print(x)
运行后输出结果和期望完全一致:
[1] "12 3456 789" "***" "" NA "***"
参数说明
- 正则
^Talk:.*:匹配所有以Talk:开头的字符串内容 dotall = TRUE:让正则中的.可以匹配回车、换行等所有特殊字符,确保从Talk:开始到整段结束的所有内容都被纳入匹配范围
如果要保留先定位再替换的写法,修改定位的正则即可:
stri_sub_all(x, stri_locate_all_regex(x, "^Talk:.*", omit_no_match=TRUE, dotall = TRUE)) <- "***"
内容的提问来源于stack exchange,提问作者user17070261
相关产品推荐
相关产品推荐

