【问题标题】:Extract text between last occurrence of braces在最后一次出现的大括号之间提取文本
【发布时间】:2014-07-31 23:17:51
【问题描述】:

我有这样的字符串,

Protein XVZ [Human]
Protein ABC [Mouse]
Protein CDY [Chicken [type1]]
Protein BBC [type 2] [Bacteria]

输出应该是,

Human
Mouse
Chicken [type1]
Bacteria

因此,我想要最后一对大括号内的所有内容。必须像上一个示例一样忽略该对之前的大括号。有没有一种有效的方法可以在 Python 中做到这一点?提前感谢您的帮助。

【问题讨论】:

  • Protein CDY [Chicken [type1]] 行的最后一对大括号不会是 [type1] 吗?
  • 没有。实际上,当最后一对落入另一对时,我需要整个东西。抱歉,我不是很清楚。
  • 如果你确定总会有三列数据,也许你可以使用csv模块
  • 列号可能不同。我的目标是拿到最后一对牙套。

标签: python string split partition


【解决方案1】:

这个怎么样:

import re
list = ["Protein XVZ [Human]","Protein ABC [Mouse]","go UDP[3] glucosamine N-acyltransferase [virus1]","Protein CDY [Chicken [type1]]","Protein BBC [type 2] [Bacteria] [cat] [mat]","gi p19-gag protein [2] [Human T-lymphotropic virus 2]"]
pattern = re.compile("\[(.*?)\]$")
for string in list:
    match = re.search(pattern,string)
    lastBracket = re.split("\].*\[",match.group(1))[-1]
    print lastBracket

【讨论】:

  • 非常感谢您的帮助。当我们在最后一个之前有另一个花括号对时,它仍然面临一个问题。例如,>gi p19-gag 蛋白 [2] [人类 T 淋巴细胞病毒 2]
  • 这里。输出应该是“人类 T 淋巴细胞病毒 2”。但它给出了“2 人类 T 淋巴细胞病毒 2”。
  • 嗯,当我测试 gi p19-gag protein [2] [Human T-lymphotropic virus 2] 时,我得到了“人类 T 淋巴细胞病毒 2”。你用的是什么版本的python?
  • 所以我编辑了我的解决方案。试试看,如果还有其他给您带来麻烦的情况,请告诉我
  • 太棒了!很高兴我能帮忙:)。这个问题绝对是一个有趣的脑筋急转弯。
猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2010-09-27
  • 2011-01-25
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多