如何使用Python查找字符串中第一个非大写字母

7
我是一个Python新手,但已经在其他语言中编程了一段时间。我有一长串DNA(小写)和AA序列(大写)。文件开头有一个全大写的蛋白质名称。因此,我的文件看起来像这样。
PROTEINNAMEatcgatcg... JFENVKDFDFLK
我需要找到字符串中第一个非大写字母,以便我可以剪切出蛋白质名称。因此,我想要从上面的例子中得到:
atcgatcg... JFENVKDFDFLK
我可以使用循环来完成这个任务,但那似乎过于繁琐和低效。是否有一种简单的Python方法来实现它?
我可以使用re.findall("[A-Z]",mystring)获取所有大写字母,但然后我需要进行比较,以查看结果与原始字符串的区别。
谢谢!
4个回答

4
你的正则表达式已经接近完成了,但是除了findall之外还有其他方法: http://docs.python.org/library/re.html#re.sub
>>> import re
>>> protein_regex = re.compile('^[A-Z]+')
>>> dna = 'PROTEINNAMEatcgatcg... JFENVKDFDFLK'
>>> protein_regex.sub('', dna)
'atcgatcg... JFENVKDFDFLK'

不确定性能如何,但您也可以这样做

>>> import string
>>> dna.lstrip(string.uppercase)
'atcgatcg... JFENVKDFDFLK'

那么,这就是它的全部:

python -m timeit -n 10000 -s 'import re' -s 'protein_regex = re.compile("^[A-Z]+")' -s 'dna = "PROTEINNAMEatcgatcg... JFENVKDFDFLK"' 'protein_regex.sub("", dna)'
10000 loops, best of 3: 1.36 usec per loop

python -m timeit -n 10000 -s 'import string' -s 'dna = "PROTEINNAMEatcgatcg... JFENVKDFDFLK"' 'dna.lstrip(string.uppercase)'
10000 loops, best of 3: 0.444 usec per loop

第二个看起来似乎快了大约3倍。

lstrip正是我所需的。在我的其他代码中运行得非常好! - user1357015

1
使用 re.search():
import re
s1 = "ASDFASDFASDFasdfasdfasdfasdfasdf"
m = re.search("[a-z]", s1)
if m:
    print "Digit found at position %d" % m.start()
else:
    print "No digit in that string"

这也可以,但需要额外的剪切步骤。对我来说非常有帮助,因为我还在学习。谢谢! - user1357015

1

试试这个,它已经被缩短到极限了:

import re
s = 'PROTEINNAMEatcgatcg... JFENVKDFDFLK'
i = re.search('[a-z]', s).start()
protein, sequences = s[:i], s[i:]

print protein
> PROTEINNAME

print sequences
> atcgatcg... JFENVKDFDFLK

0

istitle 可以帮助你确定字符串是否包含大写字母。

    def check_uppercase(name) :
         
        for i in range(0, len(name)) :
             
            if (name[i].istitle()) :
                return name[i]
                 
        return 0
    
    name = "myCode"
    value = check_uppercase(name)
     
    if (value == 0) :
        print("No uppercase letter")
    else :
        print(value)


    #output: C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接