r - 如何改进跳过两个单词之一的正则表达式?
问题描述
我有一个文本,我想将所有comprata、comprate、comprati、comprato 更改为comprat+并将所有ricomprata、ricomprate、ricomprati、ricomprato 更改为ricomprat+。所以我写了这个正则表达式,但它跳过了两个词之一:
testo <- 'ricomprate uno comprato comprata due comprate ricomprate tre ricomprato comprati'
base::gsub('(\\s|^)(ri|)comprat[aeio](\\s|)', '\\1\\2comprat+\\3', testo)
结果是:
"ricomprat+ uno comprat+ comprata due comprat+ ricomprate tre ricomprat+ comprati"
解决方案
作为一种模式,您可以使用
\b((?:ri)?comprat)[aeio]\b
\b
防止部分匹配的单词边界(
捕获组 1(\\1
在替换中称为)(?:ri)?
可选匹配ri
comprat
匹配comprat
)
关闭组 1[aeio]
匹配任何列出的字符\b
一个词的边界
在替换使用组 1 和+
testo <- 'ricomprate uno comprato comprata due comprate ricomprate tre ricomprato comprati'
base::gsub('\\b((?:ri)?comprat)[aeio]\\b', '\\1+', testo)
输出
[1] "ricomprat+ uno comprat+ comprat+ due comprat+ ricomprat+ tre ricomprat+ comprat+"
推荐阅读
- kubernetes - Kubernetes 仪表板部署存在,未创建 pod
- python - 如何在字符串中的元组之间添加空格
- javascript - jQuery DataTables 使用 scrollX、部分宽度容器和 Bootstrap 的 table-sm 类时列宽不正确
- azure-active-directory - Microsoft OpenID Connect:发送登录请求问题不需要用户输入密码
- c++ - QIODevice::size() 和 QIODevice::bytesAvailable() 总是返回 0
- python - 如何使用 python 将整数转换为十六进制转换器?
- python - Django:在哪里存储自己的书面脚本
- linux - 如何从 TCL 脚本执行 shell 脚本
- ios - 在 AVComposition 的两个视频之间搜索时,AVPlayer 冻结
- javascript - Js - 无法打印/获取动态选择的下拉列表的正确值