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

标签 python regex

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

线条如下所示 “2584\tM108\tK:14%” “2585\tM108\tK:14%\tN:10%”

我写了以下表达式,但它们似乎让我失望...... 首先,我希望捕获 M10* 和 K,并将它们粘在一起,仅获取 M10* 之后的第一个条目(在上面的示例中为 K)。

Mutation = re.sub(r'.*\t(.*)\t.*:(.*)%.*', r'\1\2', line)

我想要突变 = 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'

关于python正则表达式用于抓取一行的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863219/

相关文章:

python - 使用pygame在python中玩俄罗斯方 block 游戏

python - 如何从 emacs org-mode 仅导出 python 输出而不是源代码到 ODT?

正则表达式匹配单词边界或非数字

regex - 使用 HTACCESS 将页面重定向到其中包含问号的 URL?

c# - 正则表达式在“在文件中查找”和“搜索当前文件”中的行为不同

regex - 如何用空白sed替换一些彩色字符

python - 如何替换每个单词中第一次出现的字符?

python - 确定任何正则表达式的输入类型

python - In[num] 在 jupyter 笔记本中是什么意思?

python - 如何在 python 中加载 *.obj 文件并对其应用纹理