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

Python正则拆分含多空格、逗号的列表失效,如何实现预期拆分?

正确拆分含多空格分隔但需保留特定空格的字符串

输入数据

Newlist1 = [['66021      4668873364_166638418    3,9202-DC,669251               GEORGIA                 KS 16.0   55    7     0     1     11/03/22 00:00  11/04/22 23:58  11/03/22 00:01   11/18/22 23:59 11/03/22 09:21  11/03/22 09:21  00:00           00:00           1     0'],
 ['18202      4819576505_166636826    4,25340414-VNDR,20536331       BRIDGE TOWNSHIP           PA 0.0    128   219   0     1     11/03/22 00:00  11/03/22 23:58  11/03/22 00:01   11/14/22 23:59 11/03/22 07:30  11/03/22 07:30  00:00           00:00           1     0                                   ']]

当前代码问题

原代码通过re.split("\s{2,}", a)按两个以上空格拆分字符串,但无法区分字段内部的单空格(如地名BRIDGE TOWNSHIP、日期时间11/03/22 00:00)和字段之间的单空格(如KS与16.0之间),导致本该保留整体的元素被拆分,而本该分开的字段被合并。

def listToString(s):
    str1 = ""
    return (str1.join(s))

output_list = []
for i in NewList1:
    a= listToString(i)
    output_list.append(re.split("\s{2,}", a))
final = [x for x in output_list if x]

预期输出

['66021',
  '4668873364_166638418',
  '3,9202-DC,669251',
  'GEORGIA',
  'KS',
  '16.0',
  '55',
  '7',
  '0',
  '1',
  '11/03/22 00:00',
  '11/04/22 23:58',
  '11/03/22 00:01',
  '11/18/22 23:59',
  '11/03/22 09:21',
  '11/03/22 09:21',
  '00:00',
  '00:00',
  '1',
  '0'],
 ['18202',
  '4819576505_166636826',
  '4,25340414-VNDR,20536331',
  'BRIDGE TOWNSHIP',
  'PA',
  '0.0',
  '128',
  '219',
  '0',
  '1',
  '11/03/22 00:00',
  '11/03/22 23:58',
  '11/03/22 00:01',
  '11/14/22 23:59',
  '11/03/22 07:30',
  '11/03/22 07:30',
  '00:00',
  '00:00',
  '1',
  '0']

解决方案

换用正则匹配而非拆分的思路,优先匹配需要保留整体的元素(日期时间、多单词地名、单独时间),再匹配无空格的普通字段,确保拆分逻辑符合预期。

实现代码

import re

Newlist1 = [['66021      4668873364_166638418    3,9202-DC,669251               GEORGIA                 KS 16.0   55    7     0     1     11/03/22 00:00  11/04/22 23:58  11/03/22 00:01   11/18/22 23:59 11/03/22 09:21  11/03/22 09:21  00:00           00:00           1     0'],
 ['18202      4819576505_166636826    4,25340414-VNDR,20536331       BRIDGE TOWNSHIP           PA 0.0    128   219   0     1     11/03/22 00:00  11/03/22 23:58  11/03/22 00:01   11/14/22 23:59 11/03/22 07:30  11/03/22 07:30  00:00           00:00           1     0                                   ']]

# 正则模式:按优先级匹配日期时间、单独时间、多单词地名、无空格字段
pattern = r'\d{2}/\d{2}/\d{2} \d{2}:\d{2}|\d{2}:\d{2}|[A-Za-z]+(?: [A-Za-z]+)+|\S+'

final = []
for sublist in Newlist1:
    # 去除字符串首尾多余空格
    raw_str = sublist[0].strip()
    # 匹配所有符合规则的元素
    elements = re.findall(pattern, raw_str)
    final.append(elements)

# 验证输出
for item in final:
    print(item)

模式说明

  • \d{2}/\d{2}/\d{2} \d{2}:\d{2}:匹配xx/xx/xx xx:xx格式的日期时间组合
  • \d{2}:\d{2}:匹配xx:xx格式的单独时间
  • [A-Za-z]+(?: [A-Za-z]+)+:匹配由空格分隔的多单词地名(如BRIDGE TOWNSHIP)
  • \S+:匹配所有无空格的字段(数字、带符号的编码等)

这种方式能精准区分需要保留的单空格和作为分隔符的单空格,完全符合预期输出要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:40:22