2017-03-17 65 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)減去,因爲它是落後的索引)。

相關問題