r - 如何使用 OR 在正则表达式中的字符串操作的多个匹配项之间进行选择
问题描述
我在数据框的一列中有一堆字符串。字符串中有多个拼写错误,所以我想在一行代码中替换它们。数据框如下图所示:
comment <- c("3.3% 1AT $100000 AND 1.2% BALANCE", "3.3% 1DT $100000 AND 1.2% BALANCE" ,
+ "3.3% 1S $100000 AND 1.2% BALANCE", "3.3% 1SST $100000 AND 1.2% BALANCE", "3.3% 1S T$100000 AND 1.2% BALANCE")
df <- data.frame(comment)
comment
1 3.3% 1AT $100000 AND 1.2% BALANCE
2 3.3% 1DT $100000 AND 1.2% BALANCE
3 3.3% 1S $100000 AND 1.2% BALANCE
4 3.3% 1SST $100000 AND 1.2% BALANCE
5 3.3% 1S T$100000 AND 1.2% BALANCE
基本上,我想做的是用1ST替换1AT、1DT、1S、1SST。
我关注了这个链接我可以在正则表达式中使用 OR 而不捕获包含的内容吗?并编写了以下代码:
gsub("^(\\d\\.\\d%) (?: 1AT|1DT|1S|1SST) (\\$100000) AND (\\d\\.\\d%) BALANCE","\\1 1ST \\2 AND \\3 BALANCE", df$comment)
我了解此代码不会将“1S T$100000”更改为正确的甲酸盐,但我希望它适用于其他行。但是,此代码没有更改字符串。有什么问题吗?
解决方案
我强烈建议不要使您的正则表达式过于复杂。在复杂性和特殊性之间找到一个快乐的媒介。也许是这样的:
gsub("% (1AT|1DT|1S|1SST) \$", "% 1ST $", comment)
除非您已经完成trimws()
或类似操作,否则我发现正则表达式中的空格问题非常常见 - 多个空格或非标准空格字符。这将更加健壮:
gsub("%\\s+(1AT|1DT|1S|1SST)\\s+\\$", "% 1ST $", comment)
推荐阅读
- javascript - 此 JavaScript 代码块的更高效但更易读的替代方案
- node.js - 带有 expressjs 的 HTML 模板
- centos7 - SymmetricDS 单向复制
- python - 为什么我的路线没有以正确的参数将我带到我想在 Flask 中去的地方?
- python - python中的csv读取器和写入器中的序列是什么?
- r - facet_grid label_both 将标签文本动态构面变量包装在闪亮图中
- python-3.x - 将 QGraphicBlurEffect 设置为 QStackWidget 而不影响其中的小部件
- javascript - 如何获取字符串并将其用作应用程序脚本中语法的一部分?
- javascript - 为什么我的终端不断收到相同错误的垃圾邮件?
- int - 在文本字段中显示空 int 值