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

如何用Python正则表达式分离字符串中的年份与剩余内容

问题:分离字符串中的年份子串与剩余内容

现有字符串strng = "Fiscal Year Ended March 31, 2018 Total Year (in $000's)",需判断其中是否存在年份子串(如2014、2015等),若存在则将年份子串与剩余内容分离。目前使用re.findall(r"\b20[012]\d\b", strng)获取年份,请问如何同时获取剩余内容?期望输出:year_substring --> '2018',rest --> 'Fiscal Year Ended March 31, Total Year (in $000's)',能否通过正则表达式实现?


当然可以用正则表达式一次性搞定!核心思路是利用捕获组把年份和前后的内容分别匹配出来,或者直接通过替换提取剩余内容,两种方式都很高效,我给你具体说明:

方法一:使用捕获组拆分内容

我们可以写一个包含三个捕获组的正则:

  • 第一个组非贪婪匹配年份前的所有内容,避免吞掉年份后的部分
  • 第二个组匹配目标年份
  • 第三个组匹配年份后的所有内容

具体代码如下:

import re

strng = "Fiscal Year Ended March 31, 2018 Total Year (in $000's)"
# 正则:前缀 + 年份组 + 后缀
pattern = r"(.*?)\b(20[012]\d)\b(.*)"
match_result = re.search(pattern, strng)

if match_result:
    year_substring = match_result.group(2)
    # 拼接前后内容,同时清理年份前后的多余逗号和空格
    rest_content = match_result.group(1).rstrip(', ') + match_result.group(3).lstrip()
    
    print(f"year_substring --> '{year_substring}'")
    print(f"rest --> '{rest_content}'")

运行后就能得到你想要的输出:

year_substring --> '2018'
rest --> 'Fiscal Year Ended March 31, Total Year (in $000's)'

方法二:直接替换年份获取剩余内容

如果不需要单独拆分前后缀,也可以直接把匹配到的年份从原字符串中移除,再清理多余空格:

import re

strng = "Fiscal Year Ended March 31, 2018 Total Year (in $000's)"
year_pattern = r"\b20[012]\d\b"

# 先提取年份
year_match = re.search(year_pattern, strng)
if year_match:
    year_substring = year_match.group()
    # 替换年份为空,再清理因移除年份产生的多余空格
    rest_content = re.sub(year_pattern, "", strng).replace('  ', ' ').strip()
    
    print(f"year_substring --> '{year_substring}'")
    print(f"rest --> '{rest_content}'")

这种方式代码更简洁,适合只需要分离年份和剩余内容的场景。

另外补充一下:你的年份正则20[012]\d是匹配2000-2029的年份,如果需要覆盖2000-2099的所有年份,可以改成20\d{2};如果要匹配更早期的年份(比如19xx),可以调整为(19|20)\d{2}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:23:48