如何用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
相关产品推荐
相关产品推荐

