想要查看文件中的行并抓取其中的某些部分。
线条如下所示 " 2584 \ tM108 \ TK:14%" " 2585 \ tM108 \ TK:14%\ TN:10%"
我写了以下表达式,但它们似乎让我失望了...... 首先,我希望抓住M10 *和K,并将它们粘在一起,只取M10 *之后的第一个条目(在上面的例子K中)。
Mutation = re.sub(r'.*\t(.*)\t.*:(.*)%.*', r'\1\2', line)
我想要Mutation = M108K
其次我想抓住没有%符号的百分比
Percentage = re.sub(r'.*\t.*\t.*:(.*)%.*', r'\1', line)
我想要百分比= 14
写作表达方式并不是很实践,这些表达方式确实不起作用且效率低下。任何帮助修复/优化它们都表示赞赏。
答案 0 :(得分:3)
我会在一个正则表达式中完成所有这些操作。 .*
贪婪,尽可能多地吃掉所有角色。因此,您需要在?
旁边添加*
量词来进行非贪婪的匹配。
>>> import re
>>> s = "2584\tM108\tK:14%" "2585\tM108\tK:14%\tN:10%"
>>> re.sub(r'^.*?\t(.*?)\t(.*?):(.*?)%.*', r'\1\2 \3', s)
'M108K 14'
或
>>> mutation,percentage = re.sub(r'^.*?\t(.*?)\t(.*?):(.*?)%.*', r'\1\2 \3', s).split()
>>> mutation
'M108K'
>>> percentage
'14'