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

Python正则表达式匹配至多1个空格分隔的文本段(需保留位置)

问题:解析
标签表格数据并保留文本段位置 

我尝试解析

标签中的表格数据,但难以找到合适的正则表达式模式。我希望顺序匹配所有被至多一个空格分隔的字符序列。
输入:' Not seasonally adjusted Seasonally adjusted (1) Latest'
期望输出:['Not seasonally adjusted', 'Seasonally adjusted (1)', 'Latest']
我尝试过以下正则表达式:

  • 负向前瞻表达式'[\S ]+(?!\s{2,})',匹配结果为整行文本;
  • 否定表达式'[^\s{2,}]',匹配文本中的每个非空格字符;
  • 结合.*与否定的表达式'.*[^\s{2,}]',匹配结果为整行文本。
    注意:我使用Python,但不想使用re.split('\s{2,}')这类方法,因为我不仅需要提取文本,还要保留每个文本段的起止字符位置,以便输入到表格解析/解释脚本中。请问该如何实现?
解决方案

使用正则表达式\S(?:\s?\S)*配合re.finditer()即可实现,该模式的逻辑是:

  • \S:匹配字段的第一个非空格字符
  • (?:\s?\S)*:匹配任意次数的「可选单个空格 + 非空格字符」组合,确保字段内仅允许单个空格分隔,遇到两个及以上连续空格时自动终止匹配

Python代码示例

import re

input_str = '                                                   Not seasonally adjusted                      Seasonally adjusted (1)                  Latest'
pattern = r'\S(?:\s?\S)*'

# 获取所有匹配对象,包含位置信息
matches = list(re.finditer(pattern, input_str))

# 提取文本内容
extracted_text = [match.group() for match in matches]
# 提取每个文本段的起止索引
text_positions = [(match.start(), match.end()) for match in matches]

print("提取的文本列表:", extracted_text)
print("各文本段的起止位置:", text_positions)

运行后会输出你需要的文本列表,同时match.start()和match.end()能直接拿到每个文本段在原字符串中的起始和结束位置,完全满足表格解析时的位置需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:30:59