我有一个保存数据的字符串。我希望一切都在({和})
"({Simple Data})"
应返回“简单数据”
答案 0 :(得分:0)
如果方括号始终位于字符串的开头和结尾,则可以执行以下操作:
l = "({Simple Data})"
print(l[2:-2])
吸引人的地方:
"Simple Data"
在Python中,您可以通过[]运算符访问单个字符。这样,您可以访问从第三个字符(索引= 2)开始到倒数第二个字符(索引= -2,该序列中不包括倒数第二个)的字符序列。
答案 1 :(得分:0)
或正则表达式:
s = '({Simple Data})'
print(re.search('\({([^})]+)', s).group(1))
输出:
'Simple Data'
答案 2 :(得分:0)
在这里,我设计了一个针对嵌套数据的令牌生成器。 OP应该检出here。
import collections
import re
Token = collections.namedtuple('Token', ['typ', 'value', 'line', 'column'])
def tokenize(code):
token_specification = [
('DATA', r'[ \t]*[\w]+[\w \t]*'),
('SKIP', r'[ \t\f\v]+'),
('NEWLINE', r'\n|\r\n'),
('BOUND_L', r'\(\{'),
('BOUND_R', r'\}\)'),
('MISMATCH', r'.'),
]
tok_regex = '|'.join('(?P<%s>%s)' % pair for pair in token_specification)
line_num = 1
line_start = 0
lines = code.splitlines()
for mo in re.finditer(tok_regex, code):
kind = mo.lastgroup
value = mo.group(kind)
if kind == 'NEWLINE':
line_start = mo.end()
line_num += 1
elif kind == 'SKIP':
pass
else:
column = mo.start() - line_start
yield Token(kind, value, line_num, column)
statements = '''
({Simple Data})
({
Parent Data Prefix
({Nested Data (Yes)})
Parent Data Suffix
})
'''
queue = collections.deque()
for token in tokenize(statements):
if token.typ == 'DATA' or token.typ == 'MISMATCH':
queue.append(token.value)
elif token.typ == 'BOUND_L' or token.typ == 'BOUND_R':
print(''.join(queue))
queue.clear()
此代码的输出应为:
Simple Data
Parent Data Prefix
Nested Data (Yes)
Parent Data Suffix
答案 3 :(得分:0)
答案 4 :(得分:0)
您可以尝试此正则表达式(?s)\(\{(.*?)\}\)
它只是捕获定界符之间的内容。
请注意,这并不说明嵌套。
如果您担心嵌套,那么最好使用标准的Python re
引擎
是使用此正则表达式仅获取内部嵌套:
\(\{((?:(?!\(\{|\}\).)*)\}\)