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

如何用R函数为字符串中的所有数值统一添加颜色标记?

问题分析

原代码的核心问题在于:

  • 字符串按空格分割后,很多数值和单位/标点连在一起(比如5,9cm.、19mm),并非纯数字,原条件value == gsub(".*(\\b\\d+\\b).*", "\\1", text)只能匹配纯单个数字(比如56),无法覆盖带单位/标点的数值元素。
  • 用整个text提取的第一个数值去和每个value对比,逻辑错误,只能匹配到一个元素,无法覆盖所有数值。
解决方案

调整数值检测的逻辑,用正则表达式判断每个元素是否包含数值(支持整数、带逗号的小数,以及后面跟随单位/标点的情况),然后统一上色。修正后的代码如下:

library(tidyverse)
library(crayon)
library(stringr)

# 原始文本
text <- tolower(c("Kyste simple inférieur de
56 mm. Aorto-bi-iliaque en
5,9cm. Artères communes de 19mm et
de 87mm. 120mm stable."))

# 分割字符串为单个元素(保留原空格分割的结果)
split_text <- str_split(text, " ")[[1]]

# 创建数据框并处理颜色标记
df <- tibble(value = split_text) %>%
  mutate(
    value2 = case_when(
      # 匹配特定单词,设为绿色
      value == "aorto-bi-iliaque" ~ green(value),
      # 匹配数值相关元素:整数、带逗号的小数,可跟随mm/cm或标点
      str_detect(value, "^\\d+(,\\d+)?(mm|cm)?\\.?$") ~ blue(value),
      # 其他元素保持原样
      TRUE ~ value
    )
  )

# 打印结果(cat直接输出,不需要print包裹)
cat(df$value2, sep = " ")
关键修改说明
  • 替换了原unique_words函数,直接用str_split分割字符串,避免unique去重导致原文本顺序丢失。
  • 用str_detect结合正则表达式^\\d+(,\\d+)?(mm|cm)?\\.?$检测数值元素:
    • ^\\d+:以数字开头
    • (,\\d+)?:可选的带逗号的小数部分
    • (mm|cm)?:可选的单位mm或cm
    • \\.?$:可选的结尾标点,以句号结束
  • 去掉了多余的print包裹cat,直接用cat输出即可保留空格分隔的格式。

运行后,所有数值元素(包括56、5,9cm.、19mm、87mm、120mm)都会显示为蓝色,特定单词aorto-bi-iliaque显示为绿色,其他文本保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:05:22