You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式排除*前缀6位大写字母模式,提取抗菌药物数据问题

修正R语言正则提取抗菌药物数据的问题

问题根源

原正则(?<!\\*)[A-Z]{3}无法排除*ESCCOL中的SCC,因为SCC的前一个字符是E而非*,负向回溯仅检查紧邻的前一个字符,而非整个字符串是否以*开头。我们需要精准匹配后跟药敏标识(R/S/I等)的3位抗菌药物编码,同时排除菌株编码里的无关字母组合。

修正后的代码

library(tidyverse)

df <- tibble(
  sample_date_time = as_datetime("2021-01-01 03:00:00"),
  sample_no = "BC11001",
  result_text = "[<*ESCCOL/2/I   /AMPR/>=32/AUGR/16/>]"
)

df %>%
  separate_longer_delim(result_text, delim = "/") %>% 
  mutate(
    # 提取*开头的6位菌株编码
    org = str_extract(result_text, "(?<=\\*)[A-Z]{6}"),
    # 仅提取后跟药敏标识的3位抗菌药物编码
    antimicrobial = str_extract(result_text, "[A-Z]{3}(?=[RSIPNrsipn])"),
    # 提取对应的药敏结果并统一转为大写
    sens = str_extract(result_text, "(?<=[A-Z]{3})[RSIPNrsipn]") %>% str_to_upper()
  )

关键调整说明

  • 菌株编码提取:使用(?<=\\*)[A-Z]{6}正向回溯断言,精准匹配*之后的6位大写字母,无需分组提取。
  • 抗菌药物编码提取:用[A-Z]{3}(?=[RSIPNrsipn])正向先行断言,仅匹配后面紧跟药敏标识的3位大写字母,彻底排除菌株编码中的无关字母组合。
  • 药敏结果提取:用(?<=[A-Z]{3})[RSIPNrsipn]正向回溯断言提取3位药物编码后的药敏标识,再通过str_to_upper()统一格式。

修正后输出示例

sample_date_timesample_noresult_textorgantimicrobialsens
2021-01-01 03:00:00BC11001[<*ESCCOLESCCOLNANA
2021-01-01 03:00:00BC110012NANANA
2021-01-01 03:00:00BC11001INANANA
2021-01-01 03:00:00BC11001AMPRNAAMPR
2021-01-01 03:00:00BC11001>=32NANANA
2021-01-01 03:00:00BC11001AUGRNAAUGR
2021-01-01 03:00:00BC1100116NANANA
2021-01-01 03:00:00BC11001>]NANANA

内容的提问来源于stack exchange,提问作者Ollie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:43:11