2017-03-17 57 views
0

我有类似如下条目:如何获得两个分隔符巨蟒之间串

"<![CDATA[Lorem ipsum feed for an interval of 30 seconds]]>" 

如何获得最里面的方括号中的字符串即“Lorem存有饲料30秒的时间间隔”

其中一些条目是普通字符串,有些是由[]如上

+1

最佳显示每一个在您的文章 – Roelant

+0

可能的选项之一能有之前或之后的'<![CDATA [...]]>'是什么?如果没有,你可能只用一个片'[9:-3] [?如何找到了两个特殊字符的字符串]' –

+1

的可能的复制(http://stackoverflow.com/questions/14716342/how-do -i-find-the-string-between-two-special-characters) – Mayazcherquoi

回答

2

使用string.See的分割方法中的下面的代码段。

string = "<![CDATA[[[[[Lorem ipsum feed for an interval of 30 seconds]]]]]]]>" 
inner_str = string.split('[')[len(string.split('[')) -1 ].split(']')[0] 
print inner_str 
+0

不错!只是第二行可以写在一个更好的方法:'inner_str = string.split( '[')[ - 1] .split( ']')[0]' – Hossein

+0

商定Hossien。 –

1

可以使用什么是在答复中提到,以this question,但为了得到最内层的字符串,你将有分隔的递归称之为。

修改接受的答案,你可以使用以下实现它:

def find_inner(s): 
    temp = s.partition('[')[-1].rpartition(']')[0] 
    if not temp: 
     return s 

    return find_inner(temp) 
+0

我相信这不会涵盖OP使用案例中的一些角落案例,例如,数据可能包含不平衡的括号。 –

1

使用正则表达式:

import re 
string = '<![CDATA[Lorem ipsum feed for an interval of 30 seconds]]>' 
reverse = string[::-1] 
start = len(string)-re.search(r'\[', reverse).start() 
end = re.search(r'\]', string).start() 
print(string[start:end]) 

你应该找到最后[和第一]之间的文本。在上面的代码中,我使用re.search()函数来查找第一次出现的字符。找到]的第一个匹配项是可以的。但要找到[最后一次出现,我扭转串并发现它的第一次出现(位置由len(string)减去,因为它是落后的索引)。

相关问题