Skip to main content
 首页 » 编程设计

用于抓取一行特定部分的 python 正则表达式

2024年08月25日28exmyth

想要遍历文件中的行并获取其中的某些部分。

线条如下所示 “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

不太熟练的是写表达式,这些实际上不起作用而且效率低下。感谢任何修复/优化它们的帮助。

请您参考如下方法:

我会在一个正则表达式中完成所有这些。 .* 是贪婪的,它尽可能多地吃掉所有字符。因此,您需要通过在 * 旁边添加 ? 量词来使其进行非贪婪匹配。

>>> 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'