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

