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

如何用Python正则表达式提取1357与2468之间的字符串内容?

解决提取指定标识间内容的问题

嘿,你的正则没生效的原因很清楚哦——你用了\.来匹配1357后面的字符,但原字符串里1357后面是*,不是点号,这就导致正则根本匹配不到目标内容啦。下面给你几种靠谱的解决方法:

方法一:修正正则表达式

你需要把正则里的\.改成匹配实际存在的*,注意*是正则的元字符,得用\*转义才能匹配字面量的星号。如果要匹配两个标识之间的内容,用非贪婪模式会更稳妥,避免意外匹配到多余内容:

import re

a = '*1357*0123456789012345678901234567890123456789*2468*'
result = re.findall(r'1357\*(.*?)\*2468', a)
print(result)  # 输出: ['0123456789012345678901234567890123456789']

简单解释下正则各部分:

  • 1357\*:精准匹配1357*这个固定片段,\*转义元字符确保匹配真实的星号
  • (.*?):非贪婪捕获组,会尽可能少地匹配字符,直到遇到后面的*2468
  • \*2468:精准匹配*2468这个结束标识

如果确定中间内容里没有星号,也可以把.*?换成.*(贪婪模式),结果是一样的,但非贪婪模式容错性更强。

方法二:字符串分割法(更简便直观)

如果你的字符串格式是固定的,用字符串分割可能比正则更简单,代码也更易懂:

a = '*1357*0123456789012345678901234567890123456789*2468*'
# 第一步按'*1357*'分割,取第二部分;第二步按'*2468*'分割,取第一部分
target_content = a.split('*1357*')[1].split('*2468*')[0]
print(target_content)  # 输出: 0123456789012345678901234567890123456789

这种方法不需要引入正则模块,逻辑一目了然,适合格式固定的场景。

方法三:零宽断言正则写法(更灵活)

如果你不想在正则里处理标识的捕获,也可以用零宽断言来精准定位目标内容:

import re

a = '*1357*0123456789012345678901234567890123456789*2468*'
result = re.findall(r'(?<=1357\*).*?(?=\*2468)', a)
print(result)  # 输出: ['0123456789012345678901234567890123456789']

这里的断言作用:

  • (?<=1357\*):反向预查,确保当前位置前面是1357*
  • (?=\*2468):正向预查,确保当前位置后面是*2468
  • 中间的.*?就是我们要提取的核心内容

这种写法的好处是不需要捕获组,直接返回目标内容,逻辑上更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:53