[英]Python string parsing from .txt
我有以下形式的字符串:
}# => 2[1 HMDB00001 ,2 HMDB00002]
}# => 5[1 HMDB00001 ,2 HMDB00002, 3 HMDB00003 ,4 HMDB00004,5 HMDB00005]
}# => 1[1 HMDB00001]
在.txt文件中。 我正在尝试使用带有正则表达式的re.search()在python列表中解析它们,但到目前为止没有成功。 如您所料,列表应包含以下elements = ["1 HMDB00001", "2 HMDB00002", "3 HMDB00003"]
。 列表彼此独立。 因此,在解析时只能考虑一行(eg. }# => 2[1 HMDB00001 ,2 HMDB00002])
。
(?<=[\[,])\s*(\d+ HMDB0+\d+)
请改用re.findall
https://regex101.com/r/eS7gD7/19#python
import re
p = re.compile(r'(?<=[\[,])\s*(\d+ HMDB0+\d+)', re.IGNORECASE | re.MULTILINE)
test_str = "}# => 2[1 HMDB00001 ,2 HMDB00002]\n}# => 5[1 HMDB00001 ,2 HMDB00002, 3 HMDB00003 ,4 HMDB00004,5 HMDB00005]\n}# => 1[1 HMDB00001]"
re.findall(p, test_str)
这似乎可行,但是鉴于您的问题很难确定。 您可能可以根据得到的答案拼凑解决方案。
import re
strings = [
'}# => 2[1 HMDB00001 ,2 HMDB00002]',
'}# => 5[1 HMDB00001 ,2 HMDB00002, 3 HMDB00003 ,4 HMDB00004,5 HMDB00005]',
'}# => 1[1 HMDB00001]',
]
for s in strings:
mat = re.search(r'\[(.*)\]', s)
elements = map(str.strip, mat.group(1).split(','))
print elements
哪个输出:
['1 HMDB00001', '2 HMDB00002']
['1 HMDB00001', '2 HMDB00002', '3 HMDB00003', '4 HMDB00004', '5 HMDB00005']
['1 HMDB00001']
假设您的模式正好是:一位数字,一个空格, HMDB
,5位数字, HMDB
顺序。
结果存储在每行的字典中。
import re
matches = {}
with open('my_text_file.txt', 'r') as f:
for num, line in enumerate(f):
matches.update({num: re.findall(r'\d\sHMDB\d{5}', line)})
print(matches)
如果HMDB
可能不同,则可以使用r'\\d\\s[a-zA-Z]{4}\\d{5}'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.