繁体   English   中英

“。”通配符在python的正则表达式中对我不起作用?

[英]“.” wildcard didn't work for me in regex in python?

因此,我想从一段.pdb格式数据中提取以下氨基酸缩写:['GLU','PHE',...,'ASN']

ATOM    296  OE2 GLU A  43      18.414  12.323   8.758  1.00 32.23           O  
ATOM    297  N   PHE A  50      18.072  10.668  14.644  1.00 34.68           N  
ATOM    298  CA  PHE A  50      18.038  10.228  16.039  1.00 35.61           C  
ATOM    299  C   PHE A  50      18.501  11.321  17.019  1.00 35.86           C  
ATOM    300  O   PHE A  50      18.018  11.413  18.091  1.00 36.21           O  
ATOM    301  CB  PHE A  50      18.844   8.936  16.226  1.00 35.43           C  
ATOM    302  CG  PHE A  50      18.811   8.386  17.623  1.00 37.33           C  
ATOM    303  CD1 PHE A  50      17.924   7.416  17.982  1.00 36.31           C  
ATOM    304  CD2 PHE A  50      19.659   8.840  18.557  1.00 39.84           C  
ATOM    305  CE1 PHE A  50      17.875   6.922  19.220  1.00 37.80           C  
ATOM    306  CE2 PHE A  50      19.591   8.330  19.833  1.00 40.97           C  
ATOM    307  CZ  PHE A  50      18.709   7.368  20.144  1.00 37.91           C  
ATOM    308  N   ASN A  51      19.462  12.125  16.616  1.00 36.20           N ...

我在python脚本中使用了以下命令:

residue=re.compile(r"(?<=ATOM...............)+?(?=..............\.)").findall(fpdb)

希望通过查看字符串前后的内容来提取基于文件格式的目标字符串。 但是我只得到一个空名单,所以我很困惑,急需一些帮助。 谢谢!

使用str.split()

例如:

s = """ATOM    296  OE2 GLU A  43      18.414  12.323   8.758  1.00 32.23           O  
ATOM    297  N   PHE A  50      18.072  10.668  14.644  1.00 34.68           N  
ATOM    298  CA  PHE A  50      18.038  10.228  16.039  1.00 35.61           C  
ATOM    299  C   PHE A  50      18.501  11.321  17.019  1.00 35.86           C  
ATOM    300  O   PHE A  50      18.018  11.413  18.091  1.00 36.21           O  
ATOM    301  CB  PHE A  50      18.844   8.936  16.226  1.00 35.43           C  
ATOM    302  CG  PHE A  50      18.811   8.386  17.623  1.00 37.33           C  
ATOM    303  CD1 PHE A  50      17.924   7.416  17.982  1.00 36.31           C  
ATOM    304  CD2 PHE A  50      19.659   8.840  18.557  1.00 39.84           C  
ATOM    305  CE1 PHE A  50      17.875   6.922  19.220  1.00 37.80           C  
ATOM    306  CE2 PHE A  50      19.591   8.330  19.833  1.00 40.97           C  
ATOM    307  CZ  PHE A  50      18.709   7.368  20.144  1.00 37.91           C  
ATOM    308  N   ASN A  51      19.462  12.125  16.616  1.00 36.20           N"""

for i in s.split("\n"):
    print(i.split()[3])

输出:

GLU
PHE
PHE
PHE
PHE
PHE
PHE
PHE
PHE
PHE
PHE
PHE
ASN

使用列表理解。

例如:

data = [i.split()[3] for i in s.split("\n")]
print(data)
#['GLU', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'ASN']

使用正则表达式

import re
print( re.findall(r"ATOM\s+\d+\s+\w+\s+([A-Z]+)", s) )

假设没有丢失的单元格值,如果您想在第12列(第0列)时提取第3列(从0开始的列),

import re
re.split(r'\s+', fpdb)[3::12]
# ['GLU', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'PHE', 'ASN']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM