Python 获取括号之间的单个字符串

Python 获取括号之间的单个字符串,python,rml,Python,Rml,假设我有这根绳子 [LEVEL] [NAME]The Girder Guide! [/NAME] [AUTHOR]draworigami[/AUTHOR] [AUTHORLEVEL]11[/AUTHORLEVEL] [COUNTRY]CA[/COUNTRY] [ID]62784[/ID] [RATING]4[/RATING] [DATE]2021-05-11 23:08:35[/DATE] [PLAYCOUNT]33[/PLAYCO

假设我有这根绳子

[LEVEL]
    [NAME]The Girder Guide! [/NAME]
    [AUTHOR]draworigami[/AUTHOR]
    [AUTHORLEVEL]11[/AUTHORLEVEL]
    [COUNTRY]CA[/COUNTRY]
    [ID]62784[/ID]
    [RATING]4[/RATING]
    [DATE]2021-05-11 23:08:35[/DATE]
    [PLAYCOUNT]33[/PLAYCOUNT]
    [WINCOUNT]28[/WINCOUNT]
    [STARS]0[/STARS]
    [COMMENTS]1[/COMMENTS]
[/LEVEL]
是否有一种方法可以获取每个[]和[/]之间的单个字符串?我一直在用互联网上的代码拍摄它,但都没有用。

试试这个:

st = "[LEVEL][NAME]The Girder Guide![/NAME][AUTHOR]draworigami[/AUTHOR][AUTHORLEVEL]11[/AUTHORLEVEL][COUNTRY]CA[/COUNTRY][ID]62784[/ID][RATING]4[/RATING][DATE]2021-05-11 23:08:35[/DATE][PLAYCOUNT]33[/PLAYCOUNT][WINCOUNT]28[/WINCOUNT][STARS]0[/STARS][COMMENTS]1[/COMMENTS][/LEVEL]"

st = st.split("]")
for i in range(len(st)):
    st[i] = st[i].replace("[", "")
    st[i]= st[i].replace("/", "")

st = st[:-1]

print(st)
圣变成-

['LEVEL', 'NAME', 'The Girder Guide!NAME', 'AUTHOR', 'draworigamiAUTHOR', 'AUTHORLEVEL', '11AUTHORLEVEL', 'COUNTRY', 'CACOUNTRY', 'ID', '62784ID', 'RATING', '4RATING', 'DATE', '2021-05-11 23:08:35DATE', 'PLAYCOUNT', '33PLAYCOUNT', 'WINCOUNT', '28WINCOUNT', 'STARS', '0STARS', 'COMMENTS', '1COMMENTS', 'LEVEL']
我所做的:

  • ]
    周围拆分字符串,以便获得不带字符']'的字符串列表
  • 只需从获得的列表中的字符串中分别删除字符
    [
    /
  • 跳过了最后一个字符,因为它是由于拆分而生成的空字符串

这将返回[]到[]之间的所有文本:

从bs4导入美化组
rml=”“”
[级别]
[名称]大梁指南![/NAME]
[作者]draworigami[/AUTHOR]
[AUTHORLEVEL]11[/AUTHORLEVEL]
[国家]CA[/COUNTRY]
[ID]62784[/ID]
[评级]4[/评级]
[日期]2021-05-11 23:08:35[/DATE]
[PLAYCOUNT]33[/PLAYCOUNT]
[WINCOUNT]28[/WINCOUNT]
[STARS]0[/STARS]
[评论]1[/COMMENTS]
[/级别]
"""
html=rml.replace('[','')
soup=BeautifulSoup(html,'html.parser')
打印(soup.find('level')。文本)
输出:

大梁导轨!
折纸画
11
加利福尼亚州
62784
4.
2021-05-11 23:08:35
33
28
0
1.
编辑#1:原始字符串没有换行符,因此要精确打印:

rml=“[LEVEL][NAME]大梁指南![/NAME][AUTHOR]draworigami][AUTHORLEVEL][COUNTRY]11][AUTHORLEVEL][COUNTRY]CA][COUNTRY][ID]62784][ID][RATING]4][RATING][DATE DATE 2021-05-11 23:08:35][DATE PLAYCOUNT 33][PLAYCOUNT WINCOUNT 28][WINCOUNT STARS][0][COMMENTS][1][COMMENTS][LEVEL
html=rml.replace('[','')
soup=BeautifulSoup(html,'html.parser')
元素=汤。查找('level')。内容
对于元素中的e:
打印(电子文本)

使用正则表达式怎么样

import re
s = '[LEVEL][NAME]The Girder Guide![/NAME][AUTHOR]draworigami[/AUTHOR][AUTHORLEVEL]11[/AUTHORLEVEL][COUNTRY]CA[/COUNTRY][ID]62784[/ID][RATING]4[/RATING][DATE]2021-05-11 23:08:35[/DATE][PLAYCOUNT]33[/PLAYCOUNT][WINCOUNT]28[/WINCOUNT][STARS]0[/STARS][COMMENTS]1[/COMMENTS][/LEVEL]'
s = s.replace('/', '')
result = []
for e in re.findall(r"\][A-Za-z0-9 _.:,!'/$\-]+\[", s):
    result.append(e.replace('[', '').replace(']', ''))
结果

['The Girder Guide!',
 'draworigami',
 '11',
 'CA',
 '62784',
 '4',
 '2021-05-11 23:08:35',
 '33',
 '28',
 '0',
 '1']

欢迎使用stackoverflow!请阅读并提供。为什么使用
rml
标记?这看起来像是一种类似XML的递归语言,因此您可以使用递归下降法LL(k)或LR(k)对其进行解析parser.regex无法工作,因为它们对于这种语言来说功能不够强大。@hiroprogator它在RDF映射语言(RML)中格式。看起来与您在问题中包含的内容不同。在规范中,方括号用于包装递归内容,而在您的格式中,方括号用于标识标记。看起来完全不同。请提供您使用的格式的参考,包括某些字符转义的规范。@snacker看起来不像…默认情况下字符串没有换行符。如果我问你如何漂亮地打印它会很愚蠢吗?哦,对了,让我为漂亮地打印添加一个编辑。