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

如何使用正则表达式将柯本气候图例转换为指定格式CSV文件

正则匹配失败原因

你当前使用的正则存在两个核心问题:

  1. 贪婪匹配规则下.*会尽可能吞噬更多字符,无法精准切割编码、描述两个字段
  2. 没有设置独立的捕获组来分别提取气候编码和描述内容,仅有的一个捕获组只能抓到单个字符,不符合提取需求

正确实现方案(R语言)

正则规则设计

使用如下正则,设置两个捕获组分别抓取编码和描述,用非[字符限制匹配范围避免贪婪问题:

^\\s*\\d{1,2}:\\s+([A-Za-z]{2,3})\\s+([^\\[]+?)\\s+\\[

规则拆解:

  • ^\\s*:匹配行首可能存在的空白字符
  • \\d{1,2}:\\s+:匹配序号、冒号及后续空格
  • ([A-Za-z]{2,3}):第一个捕获组,提取2-3位的气候编码
  • \\s+:编码和描述之间的空格
  • ([^\\[]+?):第二个捕获组,非贪婪匹配所有不是左括号[的字符,即完整的气候描述内容
  • \\s+\\[:匹配描述末尾到颜色数组左括号之间的空格和左括号

完整代码示例

library(stringr)

# 此处替换为你的原始文本内容
raw_text <- "    1:  Af   Tropical, rainforest                  [0 0 255]
    2:  Am   Tropical, monsoon                     [0 120 255]
    3:  Aw   Tropical, savannah                    [70 170 250]
    4:  BWh  Arid, desert, hot                     [255 0 0]
    5:  BWk  Arid, desert, cold                    [255 150 150]
    6:  BSh  Arid, steppe, hot                     [245 165 0]
    7:  BSk  Arid, steppe, cold                    [255 220 100]
    8:  Csa  Temperate, dry summer, hot summer     [255 255 0]
    9:  Csb  Temperate, dry summer, warm summer    [200 200 0]
    10: Csc  Temperate, dry summer, cold summer    [150 150 0]
    11: Cwa  Temperate, dry winter, hot summer     [150 255 150]
    12: Cwb  Temperate, dry winter, warm summer    [100 200 100]
    13: Cwc  Temperate, dry winter, cold summer    [50 150 50]
    14: Cfa  Temperate, no dry season, hot summer  [200 255 80]
    15: Cfb  Temperate, no dry season, warm summer [100 255 80]
    16: Cfc  Temperate, no dry season, cold summer [50 200 0]
    17: Dsa  Cold, dry summer, hot summer          [255 0 255]
    18: Dsb  Cold, dry summer, warm summer         [200 0 200]
    19: Dsc  Cold, dry summer, cold summer         [150 50 150]
    20: Dsd  Cold, dry summer, very cold winter    [150 100 150]
    21: Dwa  Cold, dry winter, hot summer          [170 175 255]
    22: Dwb  Cold, dry winter, warm summer         [90 120 220]
    23: Dwc  Cold, dry winter, cold summer         [75 80 180]
    24: Dwd  Cold, dry winter, very cold winter    [50 0 135]
    25: Dfa  Cold, no dry season, hot summer       [0 255 255]
    26: Dfb  Cold, no dry season, warm summer      [55 200 255]
    27: Dfc  Cold, no dry season, cold summer      [0 125 125]
    28: Dfd  Cold, no dry season, very cold winter [0 70 95]
    29: ET   Polar, tundra                         [178 178 178]
    30: EF   Polar, frost                          [102 102 102]"

# 按行拆分文本
lines <- str_split(raw_text, "\\n")[[1]]

# 正则匹配提取字段
matches <- str_match(lines, "^\\s*\\d{1,2}:\\s+([A-Za-z]{2,3})\\s+([^\\[]+?)\\s+\\[")

# 整理为数据框,去除空值、清理多余空格
climate_df <- na.omit(data.frame(
  code = matches[,2],
  description = str_squish(matches[,3]),
  stringsAsFactors = FALSE
))

# 导出为CSV文件
write.csv(climate_df, "koppen_climate.csv", row.names = FALSE, quote = TRUE)

运行后会在工作目录生成符合要求的CSV文件,包含code(气候编码)和description(气候描述)两个字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:05