r - 仅将括号与 R 中的文本和数字匹配
问题描述
我想替换字符串变量中的括号和括号之间的文本。但是我只想用其中至少一个数字替换这些括号。
示例字符串:
text <- c("Sekretär (dipl.) (G3)", "Zolldeklarant (3 Jahre)", "Grenzwächter (< 2 Jahre)")
我尝试了以下方法:
str_extract_all(text, " *\\(.*?\\d+.*?\\) *")
它确实提取了括号中的文本,但在第一个括号中,它也匹配第一个括号,没有任何数字。
提取应如下所示:
" (G3)"
" (3 Jahre)"
" (< 2 Jahre)"
解决方案
如果要替换括号中的这些术语,至少包含一个数字,那么sub
是一个很好的基础 R 选项:
text
sapply(text, function (x) {
gsub("\\([^()]*\\d[^()]*\\)", "REMOVED", x)
})
[1] "Sekretär (dipl.) (G3)" "Zolldeklarant (3 Jahre)" "Grenzwächter (< 2 Jahre)"
[1] "Sekretär (dipl.) REMOVED" "Zolldeklarant REMOVED" "Grenzwächter REMOVED"
我已替换为文字文本REMOVED
,只是作为显示替换的占位符。
编辑:
如果您只想提取这些术语,我们也可以使用sub
:
sapply(text, function (x) {
gsub(".*(\\([^()]*\\d[^()]*\\)).*", "\\1", x)
})
[1] "(G3)" "(3 Jahre)" "(< 2 Jahre)"
在这里,我们捕获括号中的术语,然后仅用第一个(也是唯一的)捕获组替换整个字符串\\1
。
推荐阅读
- python-3.x - 如何在 django 的管理员中将此模型转换为不可编辑的模型?
- android - 如果没有从方向旋转重新创建活动,如何执行代码?
- spring-data-jpa - JPA 中的联合和使用别名
- c# - Reference.svcmap:无法加载文件或程序集“Microsoft.SqlServer.SqlEnum,
- typescript - 解析错误:将文件重命名为 ts 后应出现“>”
- java - Spring-boot WebMvcTest,当我提供一个模拟的UserDetailsService时,为什么我会得到这个NullPointer?
- javascript - 试图了解如何通过 webpack 导入 web-assembly 包
- postgresql - 错误:在“ALL”postgres GRANT psql 8.4.15 处或附近出现语法错误
- python - Kivy:GridLayout 中的奇数标签间距
- matlab - 编译后无法在 UIFigure 中选择数据点