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

多#符号场景下,如何正确提取', #'后的指定子字符串?

问题与解决方案

问题描述

我原本用这段代码提取#后7个字符的子串:

text[text.find('#') + 1:text.find('#') + 7]

这段代码原本正常,但文本里有多个#时就出错了。目标文本是:

Void - Compliance Plan #3, # 00002 (Voided)

用初始代码得到的结果是3, #,但我要的是00002。后来我改成匹配, #子串,代码改成:

text[text.find(', #') + 3:text.find(', #') + 10]

结果却得到id - Co,这怎么解决?

解决方案

出错原因

你改后的代码返回错误结果,是因为text.find(', #')在目标文本中找不到匹配的子串,返回了-1。此时切片text[-1+3:-1+10]等价于text[2:9],刚好截取到原文本开头的id - Co。目标文本中实际的匹配子串是, # (逗号+空格+#+空格),而非你代码里写的, #。

解决方法

方法1:修正字符串查找逻辑

精准匹配目标文本中的, # 子串,再提取后续数字:

text = "Void - Compliance Plan #3, # 00002 (Voided)"
target = ', # '
start_pos = text.find(target)
if start_pos != -1:
    # 提取目标子串后5位(对应00002的长度)
    result = text[start_pos + len(target) : start_pos + len(target) + 5]
else:
    result = "未找到匹配内容"
print(result)  # 输出:00002

如果数字长度不固定,可以从目标位置往后遍历,直到遇到非数字字符:

text = "Void - Compliance Plan #3, # 00002 (Voided)"
target = ', # '
start_pos = text.find(target)
if start_pos != -1:
    start_idx = start_pos + len(target)
    end_idx = start_idx
    while end_idx < len(text) and text[end_idx].isdigit():
        end_idx += 1
    result = text[start_idx:end_idx]
else:
    result = "未找到匹配内容"
print(result)  # 输出:00002

方法2:使用正则表达式(更推荐)

正则表达式能精准匹配, # 后的连续数字,不受其他#干扰,也适配任意长度的数字:

import re

text = "Void - Compliance Plan #3, # 00002 (Voided)"
match_result = re.search(r', # (\d+)', text)
if match_result:
    result = match_result.group(1)
else:
    result = "未找到匹配内容"
print(result)  # 输出:00002

这里的正则表达式r', # (\d+)'表示匹配, # (逗号+空格+#+空格),然后捕获后续的所有连续数字,group(1)就是捕获到的数字内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:55:37