如何找到两个特殊字符之间的字符串?

11

例如,我需要两个方括号之间的所有内容。File1

[Home sapiens]
[Mus musculus 1]
[virus 1 [isolated from china]]

因此考虑上述示例,我需要第一个和最后一个方括号之间的所有内容。


所以你希望它返回 Home sapiens] [Mus musculus 1] [virus 1 [isolated from china] - Kevin
不,我想要返回的是Homo sapiens,Mus musculus 1,virus 1 [来自中国的分离物]。这意味着除了第一个和最后一个方括号之外的所有内容。 - Lord Voldemort
好的,第一个方括号出现在“Home”之前,最后一个方括号出现在china]之后。您提出的结果也缺少第二、第三、第四和第五个方括号。或者您是指每行除了第一个和最后一个方括号以外的所有内容?如果是这样,您希望它返回一个字符串还是一个字符串列表?您想要["Home sapiens", "Mus musculus 1", "virus 1 [isolated from china]"]吗? - Kevin
2
谢谢Kevin。你是对的。这不是很清楚。我的意思是每行除了第一个和最后一个方括号之外的所有内容。 - Lord Voldemort
3个回答

20

您可以使用贪婪正则表达式:

re.search(r'\[(.*)\]', your_string).group(1)

19

正则表达式是最灵活的选择。

如果您想尝试另一种方法,可以使用字符串的partitionrpartition方法:

>>> s = "[virus 1 [isolated from china]]"
>>> s.partition('[')[-1].rpartition(']')[0]
'virus 1 [isolated from china]'

1
请注意,如果第二个字符缺失,则此方法会失败:'/test'.partition('/')[-1].rpartition('/')[0] 无法找到 "test",但是 '/test/'.partition('/')[-1].rpartition('/')[0] 可以。 - tar

2

根据您的示例输入,似乎每行都以括号开头和结尾。在这种情况下,忘记正则表达式,这很简单:

for line in whatever:
    contents = line.strip()[1:-1]

(如果您的行源保留了换行符或输入中的闭合括号后有不可见空格,我已添加strip。如果不需要,请省略。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接