代码之家  ›  专栏  ›  技术社区  ›  saladi Veedrac

在大写/小写边界拆分字符串

  •  -2
  • saladi Veedrac  · 技术社区  · 8 年前

    我想在大写/小写边界拆分以下字符串。我该如何在Python和/或正则表达式中实现这一点?

    例如

    x = 'aagaaggagatataccATGAATTTGTCGGTTTACCCCAATTTAACCAAAgaaaacctgtacaa'
    
    split_boundaries(x) = ['aagaaggagatatacc', 
                           'ATGAATTTGTCGGTTTACCCCAATTTAACCAAA',
                           'gaaaacctgtacaa']
    
    2 回复  |  直到 8 年前
        1
  •  4
  •   akuiper    8 年前

    使用 re.findall :

    import re
    x = 'aagaaggagatataccATGAATTTGTCGGTTTACCCCAATTTAACCAAAgaaaacctgtacaa'
    
    re.findall(r'[a-z]+|[A-Z]+', x)
    # ['aagaaggagatatacc', 'ATGAATTTGTCGGTTTACCCCAATTTAACCAAA', 'gaaaacctgtacaa']
    
        2
  •  0
  •   Van Peer    8 年前

    另一种根据大小写将字符串拆分为列表的方法。

    x = 'ATGAaagaaggagatatacAcATGAATTTGTCGGTTTACCCCAATTTAACCAAAgaaaacctgtacaaAaa'
    
    l=[]
    lstr=''
    ustr=''
    
    
    def createList(s):
        l.append(s)
    
    for i in list(x):
        if i.islower():
            lstr+=i
            if ustr != '':
                createList(ustr)
            ustr = ''
        elif i.isupper():
            if lstr != '':
                createList(lstr)
            ustr+=i
            lstr=''
    
    if list(x)[-1].islower():
        createList(lstr)
    else:
        createList(ustr)
    
    print(l)
    

    输出

    ['ATGA', 'aagaaggagatatac', 'A', 'c', 'ATGAATTTGTCGGTTTACCCCAATTTAACCAAA', 'gaaaacctgtacaa', 'A', 'aa']