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

如何用正则捕获组内最多1-2个空格的单词组及数字?

正则表达式调整方案

核心问题分析

你之前的正则出现匹配异常,是因为第一个捕获组([\w\s-]+)属于贪婪匹配,会把后面的大量空格和第二个单词组一并吞入,导致第二个捕获组无法正确捕获目标内容。同时需要明确单词组内最多1-2个空格的规则,避免无限制匹配空格。

调整后的正则表达式

"^([\\w/-]+(?:\\s{1,2}[\\w/-]+)*)(?:\\s{5,}([\\w/-]+(?:\\s{1,2}[\\w/-]+)*))?\\s{5,}([\\d.,]+)$"

各部分规则说明

  • 第一个单词组:([\w/-]+(?:\s{1,2}[\w/-]+)*)

    • 匹配由\w(字母/数字/下划线)、/、-组成的单词
    • 单词之间仅允许1-2个空格分隔,确保不会误吞后续的大量分隔空格
    • 至少包含1个单词
  • 可选的第二个单词组:(?:\s{5,}([\w/-]+(?:\s{1,2}[\w/-]+)*))?

    • \s{5,}:匹配至少5个空格作为两个单词组的分隔符(与示例中的大量空格对应)
    • 内部的单词组规则和第一个完全一致
    • 末尾的?表示该部分可选(对应第二个单词组不存在的场景)
  • 数字部分:([\d.,]+)

    • 匹配包含数字、小数点、逗号的数值内容
  • 边界约束:^和$确保正则匹配整个字符串,避免部分匹配导致的异常

R语言测试示例

test <- c("word1 word2                  word3 word4                   1234.23,4",
          "word1 word2                                                1946.27,4")

library(stringr)

str_match(test,"^([\\w/-]+(?:\\s{1,2}[\\w/-]+)*)(?:\\s{5,}([\\w/-]+(?:\\s{1,2}[\\w/-]+)*))?\\s{5,}([\\d.,]+)$")

测试结果

[,1]                                                                   [,2]          [,3]          [,4]       
[1,] "word1 word2                  word3 word4                   1234.23,4" "word1 word2" "word3 word4" "1234.23,4"
[2,] "word1 word2                                                1946.27,4" "word1 word2" ""            "1946.27,4"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:34:57