Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式,用于抓取行的特定部分_Python_Regex - Fatal编程技术网

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

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 如果你写的表达

想要浏览文件中的行并抓住其中的某些部分

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


如果你写的表达方式不太熟练,那么这些表达方式就不起作用,效率也很低。非常感谢任何帮助修复/优化它们。

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

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