首页 > 解决方案 > 仅将括号与 R 中的文本和数字匹配

问题描述

我想替换字符串变量中的括号和括号之间的文本。但是我只想用其中至少一个数字替换这些括号。

示例字符串:

text <- c("Sekretär (dipl.) (G3)", "Zolldeklarant (3 Jahre)", "Grenzwächter (< 2 Jahre)")

我尝试了以下方法:

str_extract_all(text, " *\\(.*?\\d+.*?\\) *")

它确实提取了括号中的文本,但在第一个括号中,它也匹配第一个括号,没有任何数字。

提取应如下所示:

" (G3)"
" (3 Jahre)"  
" (< 2 Jahre)"

标签: rregexstring-matching

解决方案


如果要替换括号中的这些术语,至少包含一个数字,那么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


推荐阅读