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

如何使用python查找字符串中的第一个非大写字母,python,Python,我是python新手,但已经用其他语言编程了一段时间。我有一长串DNA(小写)和AA序列(大写)。在文件的开头,我有一个蛋白质名称,都是大写的。因此,我的文件看起来像这样 蛋白质NAMEATCGATCG。。。JFENVKDFDFLK 我需要找到字符串中的第一个非大写字母,这样我就可以删除蛋白质名称。因此,我想从上面得到的是: atcgatcg。。。JFENVKDFDFLK 我可以用一个循环来完成这项工作,但这似乎有些过分,效率低下。有没有一种简单的python方法可以做到这一点 我可以使用re.

我是python新手,但已经用其他语言编程了一段时间。我有一长串DNA(小写)和AA序列(大写)。在文件的开头,我有一个蛋白质名称,都是大写的。因此,我的文件看起来像这样

蛋白质NAMEATCGATCG。。。JFENVKDFDFLK

我需要找到字符串中的第一个非大写字母,这样我就可以删除蛋白质名称。因此,我想从上面得到的是:

atcgatcg。。。JFENVKDFDFLK

我可以用一个循环来完成这项工作,但这似乎有些过分,效率低下。有没有一种简单的python方法可以做到这一点

我可以使用re.findall(“[A-Z]”,mystring)获取所有大写字母,但是我需要进行比较,以查看结果与原始字符串的不同之处


谢谢

你的正则表达式就快到了。。。但除findall外,还有其他方法:

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

>>> 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倍。

使用re.search()


试试这个,它尽可能短:

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

lstrip正是我所需要的。用我的其他代码工作得很有魅力!这也会起作用,但需要额外的切割步骤。不过对我很有帮助,因为我还在学习。谢谢
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"
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