python3自写小工具

python3实现从字符串str1中匹配字符串str2,并返回匹

2020-09-01  本文已影响0人  AmanWang

小工具说明

  1. 第一个函数countLetter():用来查找给定的单字符letter在列表myStrList中的索引位置,返回值为一个列表
  2. 第二个函数countSubString():
    2.1 查找字符串childStr在字符串fatherStr中出现的次数及开始位置,lettersToLower设置为0时区分大小写,设置为非0时不区分大小写
    2.2 返回值为一个字典:
    {
    'childStr_original': 'abcabc', (用来匹配的原始子字符串)
    'fatherStr_original': 'abcabcabcabcabcabc', (用来匹配的原始父字符串)
    'flag': True, (True-匹配成功,False-匹配失败)
    'count': 5, (匹配到的个数)
    'index_start': [0, 3, 6, 9, 12] (匹配到的下标索引列表)
    }
  3. 说明:python3中str的count内嵌方法获取的结果和该小工具有区别,如'aaaaa'.count('aa')=2,countLetter('aa', 'aaaaa')=4

源码

# 计算一个字符letter在给定的list中的位置
def countLetter(letter, myStrList):
    if len(letter) != 1:
        return False
    if letter not in myStrList:
        return False
    tem = []
    for i in range(0,len(myStrList)):
        if letter == myStrList[i]:
            tem.append(i)
    return tem

# 查找字符串childStr在字符串fatherStr中出现的次数及开始位置,lettersToLower设置为0时区分大小写,设置为非0时不区分大小写
def countSubString(childStr, fatherStr, lettersToLower = '0'):
    resDict = {}
    childStr = str(childStr)
    fatherStr = str(fatherStr)
    resDict['childStr_original'] = childStr
    resDict['fatherStr_original'] = fatherStr

    if str(lettersToLower) != '0':
        childStr = childStr.lower()
        fatherStr = fatherStr.lower()

    # 对比用的子字符串如果为空或者不在目标字符串中,直接返回False
    if childStr not in fatherStr or len(childStr) < 1:
        resDict['flag'] = False
        resDict['count'] = 0
        resDict['index_start'] = []
        return resDict
    
    # 两个字符串相同时快速处理
    if childStr == fatherStr:
        resDict['flag'] = True
        resDict['count'] = 1
        resDict['index_start'] = [0]
        return resDict
    
    fatherStr = list(fatherStr)
    childStrList = list(childStr)
    tem, tem2, tem3 = [], [], []
    for item in childStrList:
        a = countLetter(item, fatherStr)
        tem.append(a)
    for jj in range(0, len(tem)):
        tem2.append([x - jj for x in tem[jj]])
    for m in tem2:
        tem3 = list(set(tem2[0]).intersection(m))
    tem3.sort()
    resDict['flag'] = True
    resDict['count'] = len(tem3)
    resDict['index_start'] = tem3
    return resDict

测试结果

# 引用
if __name__ == '__main__':
    print('结果1:',countSubString('test','testtestTest'))
    print('结果2:',countSubString('Test','TEstteSTteSt',lettersToLower='0'))
    print('结果3:',countSubString('Test','TEstteSTteSt',lettersToLower='1'))
    print('结果4:',countSubString('2','3Re23dt2'))
    print('结果5:',countSubString('test','abcsdr'))
    print('结果6:', countSubString(23, 15432345))
    print('结果7:',countSubString('','test'))
    print('结果8:',countSubString('test',''))
    print('结果9:',countSubString('',''))

# 结果
结果1: {'childStr_original': 'test', 'fatherStr_original': 'testtestTest', 'flag': True, 'count': 2, 'index_start': [0, 4]}
结果2: {'childStr_original': 'Test', 'fatherStr_original': 'TEstteSTteSt', 'flag': False, 'count': 0, 'index_start': []}
结果3: {'childStr_original': 'Test', 'fatherStr_original': 'TEstteSTteSt', 'flag': True, 'count': 3, 'index_start': [0, 4, 8]}
结果4: {'childStr_original': '2', 'fatherStr_original': '3Re23dt2', 'flag': True, 'count': 2, 'index_start': [3, 7]}
结果5: {'childStr_original': 'test', 'fatherStr_original': 'abcsdr', 'flag': False, 'count': 0, 'index_start': []}
结果6: {'childStr_original': '23', 'fatherStr_original': '15432345', 'flag': True, 'count': 1, 'index_start': [4]}
结果7: {'childStr_original': '', 'fatherStr_original': 'test', 'flag': False, 'count': 0, 'index_start': []}
结果8: {'childStr_original': 'test', 'fatherStr_original': '', 'flag': False, 'count': 0, 'index_start': []}
结果9: {'childStr_original': '', 'fatherStr_original': '', 'flag': False, 'count': 0, 'index_start': []}
上一篇下一篇

猜你喜欢

热点阅读