r语言 - Regex查找具有松散参数的字符串或字符串之间的数字



我试图在半结构化数据中解析一个特定分数的大文件。期望的输出是数字0、1、2、3,如果没有明确说明,则为NEGATIVE=0。在考虑测试代码格式的可变性时,我怎样才能选择数字或负数呢?谢谢你!

期望输出:2 2 0 0 3 0 0

a <- c("COMP): intermediate (score 2+)",
"COMP) intermediate (FOCAL 2+)", 
"COMP) IS NEGATIVE (0)", 
"COMP) is negative (0)",
"COMP is POSITIVE (3+)",
"COMP) NEGATIVE IN", 
"COMP) NEGATIVE (0)")
COMPpattern <- "COMP\)[:|\s]*(.*?)(?=\)*)"
str_match(toupper(a), COMPpattern)[,2]

如果您想要的数字总是每个字符串中的第一个(可能有多个)数字,那么您可以只提取第一个而忽略其余的。

out <- as.integer(stringr::str_extract(a, "\d+"))
out
# [1]  2  2  0  0  3 NA  0

或者,以R为底,

out <- suppressWarnings(as.integer(gsub("^\D*(\d+).*", "\1", a)))

从这里开始,更改"负"字。到0,我们可以从两个选项中选择(根据您的需要):

### if "negative" triggers 0 only when no other number
replace(out, is.na(out) & grepl("negative", a, ignore.case = TRUE), 0)
# [1] 2 2 0 0 3 0 0
### if "negative" should override any number found, remove is.na(out)
replace(out, grepl("negative", a, ignore.case = TRUE), 0)

(如重新赋值给out)。

(我承认这个方法忽略了你的许多"父母";和";words"我不确定这是否是对问题的过度简化。

最新更新