如何在Python中获取两个分隔符之间的字符串

4

我有以下类似的条目:

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

我该如何获取最内层方括号中的字符串,例如“Lorem ipsum feed for an interval of 30 seconds”?

其中一些条目是普通字符串,而另一些则像上面那样由[]分隔。


1
最好在您的帖子中展示每种可能选项的一个示例。 - Roelant
1
可能是重复的问题,参考如何在两个特殊字符之间查找字符串? - Mayazcherquoi
1
看起来你的数据是有效的XML,所以使用XML解析器。正则表达式无法涵盖一些边角情况。 - Paulo Scardine
1
使用ElementTree来解析它。 - Alastair McCormack
我有像entries这样的条目,实际数据是什么样的?是XML吗?请参见https://dev59.com/1mYr5IYBdhLWcg3waJj7。 - Ilja Everilä
显示剩余2条评论
3个回答

10
使用字符串的split方法。请参阅以下代码片段。
 string = "<![CDATA[[[[[Lorem ipsum feed for an interval of 30 seconds]]]]]]]>"
 inner_str = string.split('[')[len(string.split('[')) -1 ].split(']')[0]
 print inner_str

5
好的!第二行可以用更好的方式写成:inner_str = string[string.find('[')+1 : string.find(']')] - Hossein

2
您可以使用答案中提到的内容(参见此问题),但为了获取最内层字符串,您将需要递归调用它。
修改已接受的答案,您可以使用以下内容来实现:
def find_inner(s):
    temp = s.partition('[')[-1].rpartition(']')[0]
    if not temp:
        return s

    return find_inner(temp)

我认为这个可能无法覆盖到OP的使用情况中一些特殊情况,比如数据可能包含不平衡的括号。 - Paulo Scardine

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) 中减去该位置)。

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