python正则表达式,用于抓取行的特定部分
想要浏览文件中的行并抓住其中的某些部分 线条如下图所示 “2584\tM108\tK:14%” “2585\tM108\tK:14%\tN:10%” 我已经写了下面的表达,但它们似乎让我失望。。。 首先,我希望抓取M10*和K,并将它们粘在一起,只取M10*之后的第一个条目(在上面的示例K中) 我想要突变=M108K 其次,我想获取不带%符号的百分比python正则表达式,用于抓取行的特定部分,python,regex,Python,Regex,想要浏览文件中的行并抓住其中的某些部分 线条如下图所示 “2584\tM108\tK:14%” “2585\tM108\tK:14%\tN:10%” 我已经写了下面的表达,但它们似乎让我失望。。。 首先,我希望抓取M10*和K,并将它们粘在一起,只取M10*之后的第一个条目(在上面的示例K中) 我想要突变=M108K 其次,我想获取不带%符号的百分比 Percentage = re.sub(r'.*\t.*\t.*:(.*)%.*', r'\1', line) 我要百分比=14 如果你写的表达
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'
或
或者
突变,百分比=…
。我想知道为什么回答的人很少对他们回答的问题投赞成票+1,这是我的提示:不要想当然地认为惰性匹配,还要看看否定字符类。例如,[^\t]
匹配除制表符以外的任何符号。@Stribizev我不是这个问题的投票人。雅*?
将被[^\t]
取代,但*?
更容易理解。。
>>> 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'