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

拆分多单词字符串时如何保留不含数字的单词之间的空格?

可以实现,核心思路是不直接用空格拆分,而是先识别出「含数字的独立段」和「连续无数字的名称段」两类单元再提取,两种常用实现方案如下:

方案1:正则匹配提取(最简洁)

需求中的单元天然符合两类特征,可以直接写正则匹配所有符合要求的片段,不需要做拆分操作:

  • 含数字的段:单个无空格、且至少包含一个数字的字符串
  • 名称段:连续的、所有组成单词都不含数字的字符串(内部可包含空格)

Python示例代码:

import re

input_str = "1 23565 john smith 01/01/2021 another"
# 正则说明:
# \S*\d\S*:匹配含至少一个数字的无空格字符串
# [^\d\s]+(?:\s+[^\d\s]+)*:匹配连续的不含数字的单词,单词间用空格分隔
pattern = r'\S*\d\S*|[^\d\s]+(?:\s+[^\d\s]+)*'
result = re.findall(pattern, input_str)
print(result)
# 输出:['1', '23565', 'john smith', '01/01/2021', 'another']

方案2:遍历合并法

如果不想依赖正则,可以先全量按空格拆分,再遍历合并连续的无数字单词,步骤如下:

  1. 按空格把整个字符串拆成单个单词的数组
  2. 初始化结果数组和临时存储名称片段的变量
  3. 遍历每个单词:
    • 若单词包含数字:先把临时存储的名称片段(如果有)加入结果数组并清空,再把当前单词加入结果数组
    • 若单词不包含数字:拼接到临时名称变量中
  4. 遍历结束后如果临时变量还有值,补充到结果数组末尾

JavaScript示例代码:

const input = "1 23565 john smith 01/01/2021 another";
const words = input.split(' ');
const result = [];
let namePart = '';

for (const word of words) {
  if (/\d/.test(word)) {
    if (namePart) {
      result.push(namePart.trim());
      namePart = '';
    }
    result.push(word);
  } else {
    namePart += ` ${word}`;
  }
}
if (namePart) {
  result.push(namePart.trim());
}

console.log(result);
// 输出:['1', '23565', 'john smith', '01/01/2021', 'another']

注意:两种方案都依赖你给出的前提约束「名称单词的前后始终为含数字的单词」,如果存在名称出现在字符串最开头的场景,调整匹配/合并逻辑即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:08