Python如何基于非字符串起始位置的'2022'模式分割提取前缀数字
问题原因
原写法直接用split("2022")切割,默认会以第一个匹配到的"2022"子串为分割点,没有判断这个匹配子串是否在去空白后的字符串起始位置,所以当去空白后字符串开头就是"2022"时,切割后的首段是空字符串,拿不到预期结果。
实现方案
用字符串自带的find()方法即可实现需求,该方法支持指定查找的起始位置,逻辑如下:
- 先对原字符串做首尾去空白处理
- 查找第一个"2022"的匹配位置,如果位置不是0(即不在字符串开头),直接取该位置前的内容
- 如果第一个匹配位置是0(开头就是2022),就从索引1的位置开始往后找下一个"2022"匹配项,取这个匹配项前的内容
参考代码:
s = mystring.strip() # 查找第一个2022的位置 pos = s.find("2022") # 若第一个2022在字符串开头,从索引1开始向后查找下一个匹配项 if pos == 0: pos = s.find("2022", 1) # 找到符合要求的2022则取前面的内容,未找到可按业务需求自定义返回值,这里默认返回空 a = s[:pos] if pos != -1 else ""
效果验证
- 测试用例1:
mystring=' 1020220519AX'
去空白后为'1020220519AX',第一个2022匹配位置是2(非0),取前2位返回'10',符合预期。 - 测试用例2:
mystring=' 20220220519AX'
去空白后为'20220220519AX',第一个2022匹配位置是0(开头),从位置1开始查找得到下一个匹配位置是3,取前3位返回'202',符合预期。
内容的提问来源于stack exchange,提问作者darkblue80
相关产品推荐
相关产品推荐

