首页 > 技术文章 > python-一种去掉前后缀获取子串的方法

mrlayfolk 2020-03-26 21:57 原文

假设有一个字符串,其数据组成方式为:"mode_id1_str_id2",其中id1和id2为任意个数的数字,若存在mode,则id1必然也存在,否则都不存在;id2可有可没有。

如这些字符串满足条件:s1 = 'mode_0_string1_1',s2 = 'string2', s3 = 'mode_1_string3' , s4 = 'string4_12'。

目的:去掉mode_id1和id2,也就是去掉满足某种条件的字符串的前缀和后缀,或者到中间的字符串。如上面的例子中,获取的字符串分别为:string1、string2、string3、string4。

函数实现如下:

 1    s1 = 'mode_0_string1_1'
 2    s2 = 'string2'
 3    s3 = 'mode_1_string3'
 4    s4 = 'string4_12'
 5    mode = 'mode'
 6    for s in [s1, s2, s3, s4]:
 7       prefix = re.match(mode+'_\d+', s)
 8       if bool(prefix) == True:
 9          prefix_string = prefix.group()
10          prefix_index = len(prefix_string)
11          drop_prefix = s[prefix_index+1:]
12       else:
13          drop_prefix = s
14       # 去掉后缀
15       s_tmp = drop_prefix[::-1]
16       suffix = re.match('\d+_', s_tmp)
17       if bool(suffix) == True:
18          suffix_index = len(suffix.group())
19          suffix_string = drop_prefix[-suffix_index:]
20          drop_suffix = drop_prefix[:-suffix_index]
21       else:
22          drop_suffix = drop_prefix
23       print (drop_suffix)

输出结果:

1 string1
2 string2
3 string3
4 string4

这个函数其实没有普遍的使用意义,在这里只是想说明我们要匹配字符串尾部的字符串时,可以使用string[::-1]的方式先将字符串反过来,再当作处理一般的字符串首部就行了。

推荐阅读